Для подсчета циклов от 1 до n в скрипте Windows Bat


25

Мне нужно запустить команду Windows n раз в файле сценария bat. Я знаю, как сделать это на разных языках программирования, но не могу сделать это прямо в командной строке Windows :-(

Я бы ожидал что-то вроде

for(int i = 0; i < 100; i++) {
   // do something
}

или даже это (хотя и не совсем серьезно)

1.upto(100, {
   // do something
}) 

Благодарность!

РЕДАКТИРОВАТЬ

Я могу написать программу на Java, Perl, C или любой другой, который будет генерировать сценарий Bat, который выглядит следующим образом

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N

и так далее. Или даже "лучше"

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12

и затем выполнить его ... Но дело в том, что мне нужен краткий способ указать диапазон чисел для перебора в скрипте.

Благодарность!


1
Ответы здесь совершенно хороши, но ради любви к Богу ... партия? В самом деле? Я очень рекомендую перейти на более современный язык.
EBGreen

Не похоже, что у него есть выбор в этом вопросе.
wolfgangsz

Я не видел ничего, что подразумевало бы, что нет никакого выбора. На самом деле он говорит, что может писать на «любом» языке, поэтому я бы сказал, что без дополнительной информации у него, похоже, есть выбор.
EBGreen

Ребята, мне нужно развернуть код, который написан на современном языке с помощью сценария ...
raoulsson

1
Может это или не требуется - иногда это правильный инструмент для работы. Вы не можете гарантировать, что PowerShell, не говоря уже о bash, Python, Perl и т. Д., Будут установлены на сервере Windows XP или 2003. Пакетное решение является вполне приемлемым решением.
Goyuix

Ответы:


44

Вы можете сделать это так же, как это:

ECHO Start of Loop

FOR /L %i IN (1,1,5) DO (
  ECHO %i
)

1,1,5 расшифровывается как:

(start,step,end)

Также обратите внимание, что если вы встраиваете это в пакетный файл, вам нужно будет использовать двойной знак процента (%%) для префикса ваших переменных, иначе интерпретатор команд попытается вычислить переменную% i до запуска цикла.


3
«ECHO Start of Loop» будет выполняться на каждом шаге, а не только на старте.
Приостановлено до дальнейшего уведомления.

1
Кроме того, использование @знака будет подавлять печать команд, поскольку они выполняются из командной строки. "... DO @ (..."
приостановлено до дальнейшего уведомления.

Это работает только с / L после «FOR». Почему это?
Раульссон

1
Сделать для /? и вы найдете: FOR / L% переменная IN (начало, шаг, конец) DO команда [команда-параметры] Набор представляет собой последовательность чисел от начала до конца по количеству шагов. Таким образом, (1,1,5) будет генерировать последовательность 1 2 3 4 5 и (5, -1,1) будет генерировать последовательность (5 4 3 2 1)
EBGreen

Лучше использовать %%iв своем тексте и добавить комментарий, что он предназначен %iдля непосредственного выполнения в командной строке. Большинство пользователей проверят это в файле BAT и попытаются найти причину, по которой они получают ошибку (как я).
i486


6

Прямо из командной строки:

for /L %n in (1,1,100) do @echo %n

Использование командного файла:

@echo off
for /L %%n in (1,1,100) do echo %%n

Вывод:

1
2
3
...
100

Что делать, если номерная последовательность от 0001 до 00100+ и т. д.?
nwgat
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.