Як зробити цикл у пакетному файлі Windows?


Відповіді:


128
FOR %%A IN (list) DO command parameters

list - це список будь-яких елементів, розділених пробілами, комами або крапками з комою.

командою може бути будь-яка внутрішня чи зовнішня команда, пакетний файл або навіть - в OS / 2 і NT - список команд

Параметри містять параметри командного рядка для команди. У цьому прикладі команда буде виконуватися один раз для кожного елемента в списку, використовуючи параметри, якщо вони вказані.

Спеціальний тип параметра (або навіть команда) - %% A, який буде заміщений кожним елементом зі списку послідовно.

З петлі FOR


3
Чи можу я дати список (1 ДО 100) у списку?
Pradeep

36
FOR /L %x IN (1,1,100) DO ...
Джой

покладіть паренів, [ parameters ]якщо ви хочете включити кілька рядків у свою forпетлю
Френк Брайс

1
@aaiezza, я другий ваш погляд. Я зараз борюся з цими кривавими петлями, працюю зовсім несподівано, і я не маю уявлення, що контролює щось, дивлячись на вихід. Жахливі речі. Корисна, але жахлива.
RockDoctor

223

Якщо ви хочете зробити щось x разів, ви можете зробити це:

Приклад (x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 засоби:

  • Старт = 1
  • Приріст за крок = 1
  • Кінець = 200

17
Дякуємо за додавання Можливо, буде зрозуміліше, якщо ви зміните початкове значення у своєму прикладі на щось інше, ніж збільшення.
Воррен Стівенс

7
Кінцеве значення включно.
Roland Pihlakas

54

Тип:

for /?

і ви отримаєте кілька сторінок довідкового тексту.


8
Я віддаю перевагу цьому над прийнятою відповіддю, оскільки він обробляє різні версії DOS / Windows. Протягом багатьох років "For" було значно вдосконалено, і питання не говорить про те, на яку версію (-ів) націлено, а також на який сценарій намагаються.
Маттіас Андерссон

34

Умовно виконайте команду кілька разів.

  • синтаксис-FOR-файли

    FOR %%parameter IN (set) DO command 
    
  • синтаксис-FOR-файли - вкорінений на Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • синтаксис-FOR-папки

    FOR /D %%parameter IN (folder_set) DO command 
    
  • синтаксис-FOR-Список чисел

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • вміст синтаксису-FOR-файлу

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    або

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • Результати синтаксису-FOR-Command

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

Це

  • Візьміть набір даних
  • Зробіть параметр FOR %%Gрівним деякій частині цих даних
  • Виконайте команду (необов'язково, використовуючи параметр як частину команди).
  • -> Повторіть для кожного елемента даних

Якщо ви використовуєте команду FOR у командному рядку, а не в пакетній програмі, використовуйте лише один відсоток: %Gзамість %%G.

ДЛЯ параметрів

  • Перший параметр слід визначити за допомогою одного символу, наприклад літери G.

  • FOR %%G IN ...

    У кожній ітерації циклу FOR IN ( ....)застереження оцінюється і %%Gвстановлюється інше значення

    Якщо в цьому пункті виходить одне значення, то %% G встановлюється рівним цьому значенню і команда виконується.

    Якщо в результаті наведено декілька значень, то додаткові параметри неявно визначені для утримання кожного. Вони автоматично призначаються в алфавітному порядку %%H %%I %%J... (неявне визначення параметра)

    Якщо параметр посилається на файл, то для вилучення назви файла / шляху / дати / розміру може використовуватися розширена посилання на змінну.

    Звичайно, ви можете вибрати будь-яку літеру алфавіту, крім %%G. але це хороший вибір, оскільки він не суперечить жодній із букв формату імені (a, d, f, n, p, s, t, x) і забезпечує найдовший запуск безконфліктних літер для використання в якості неявних параметрів .


1
Як я можу використовувати цикл, щоб потрапити всередину раніше встановленої змінної? Я намагався / F "tokens = 2 delims =," %% i in (% a%) do (... .. але це не працює. Не вдається сказати "(було несподівано в цей час"
Shivani

Привіт там. Є чи %a%давати ім'я звичайного файлу? Вам важко допомогти з цим форматом. Сміливо задайте нове запитання, прочитавши « Як задати» .
Дж. Чомель

2
@jumping_monkey, команда FOR створює змінні параметра, які ототожнюються з літерою, а не цифрою (наприклад, %% G). Розширення параметрів формату шляху також можуть бути застосовані до них. Щоб уникнути плутанини між двома наборами літер, уникайте використання букв (a, d, f, n, p, s, t, x, z) як параметрів FOR або просто виберіть букву параметра FOR, яка є справжнім UPPER.
Й. Чомель

Привіт @ J.Chomel, зрозумів So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.(тут) [ ss64.com/nt/syntax-args.html ), дякую тобі. Будьмо, друже.
jumping_monkey

15

FOR дасть вам будь-яку інформацію, яку вам коли-небудь потрібно знати про петлі FOR, включаючи приклади правильного використання.


13

Спробуйте цей код:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1- це число, яке слід наростити, і num2це додане значення, num1а термінатор - це значення, на якому num1закінчиться воля. Ви можете вказати інше значення для термінатора в цьому операторі ( if %num1%==%terminator% goto close). Це булевий вираз goto close - це процес, якщо булева правда, а goto open - це процес, якщо булева помилкова.


Це найлегше зрозуміти. Інші відповіді не дають пояснення щодо того, що роблять команди та прапори. Пакетні файли для єдиного типу javascript зовсім не інтуїтивні.
1934286

5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit

5

З FOR /?довідки doc:

FOR% змінна IN (set) команда DO [команда-параметри]

% змінна Вказує параметр, що змінюється однією буквою.
(набір) Вказує набір одного або декількох файлів. Можуть використовуватись символи підстановки. Команда Вказує команду для кожного файлу.
команда-параметри
Вказує параметри або комутатори для вказаної команди.

Щоб використовувати команду FOR у пакетній програмі, вкажіть змінну %% замість
% змінної. Імена змінних залежать від регістру, тому% i відрізняється
від% I.

Якщо розширення команд увімкнено, підтримуються такі додаткові
форми команди FOR:

FOR / D% змінна IN (set) команда DO [команда-параметри]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[диск:] шлях]% змінна IN (встановлено) команда DO [команда-параметри]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L% змінної IN (початок, крок, кінець) DO команда [команда-параметри]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.