Для циклу, що рахує від 1 до n у сценарії "bat bat"


25

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

Я б очікував чогось подібного

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

або навіть це (хоча і не зовсім серйозно)

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

Спасибі!

EDIT

Я можу написати програму в 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
Нехай це є або не потрібно - іноді це правильний інструмент для роботи. Ви не можете гарантувати встановлення powerhell, не кажучи вже про bash, python, perl і т.д., встановити на серверному вікні Windows XP або 2003. Пакет - цілком прийнятне рішення.
Гойю

Відповіді:


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 @ (..."
Призупинено до подальшого повідомлення.

Це працює лише з / після після "ЗА". Чому це?
raoulsson

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.