Как сделать цикл в командном файле Windows?

170

Каков синтаксис цикла FOR в пакетном файле Windows?

Прадип
источник

Ответы:

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

list - это список любых элементов, разделенных пробелами, запятыми или точками с запятой.

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

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

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

Из петли FOR

Рахул
источник
3
Могу ли я указать диапазон (от 1 до 100) в списке?
Прадип
36
FOR /L %x IN (1,1,100) DO ...
Джои
поместите вокруг себя скобки, [ parameters ]если хотите включить в forцикл несколько строк
Фрэнк Брайс
1
@aaiezza, я придерживаюсь твоего мнения. Я борюсь с этими кровавыми петлями прямо сейчас, работая совершенно неожиданно, и я понятия не имею, что контролирует что-либо, смотря на результат. Ужасные вещи. Полезно, но ужасно.
RockDoctor
224

Если вы хотите сделать что-то x раз, вы можете сделать это:

Пример (х = 200):

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

1,1,200 средства:

  • Старт = 1
  • Приращение за шаг = 1
  • Конец = 200
vancoeverden
источник
17
Спасибо за добавление. Может быть более понятным, если вы измените начальное значение в вашем примере на что-то другое, чем приращение.
Уоррен Стивенс
7
Конечное значение включено.
Роланд Пихлакас
54

Тип:

for /?

и вы получите несколько страниц справочного текста.

Грег Хьюгилл
источник
8
Я предпочитаю это перед принятым ответом, потому что он обрабатывает различные версии DOS / Windows. «За» было значительно улучшено за прошедшие годы, и в вопросе не говорится, на какую версию (версии) нацелены или какие сценарии предпринимаются.
Маттиас Андерссон
34

Условно выполнить команду несколько раз.

  • Синтаксис-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • Синтаксис FOR-Files-Rooted на пути

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

    FOR /D %%parameter IN (folder_set) DO command 
    
  • синтаксис для списка номеров

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • синтаксис-для-содержимого файла

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

    или

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

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

Это

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

Если вы используете команду FOR в командной строке, а не в пакетной программе, используйте только один знак процента: %Gвместо%%G .

Параметры FOR

  • Первый параметр должен быть определен с использованием одного символа, например буквы 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%) сделать (... .. но это не работает. Он не может сказать "(было неожиданно в это время"
Shivani
Всем привет. Дает ли %a%название обычному файлу? С этим форматом сложно помочь. Не стесняйтесь задавать новый вопрос после прочтения, как спросить .
Дж. Чомел
2
@jumping_monkey, команда FOR создает переменные параметров, которые обозначаются буквой, а не числом (например, %% G). Эти пути могут также применяться в формате пути. Чтобы избежать путаницы между двумя наборами букв, избегайте использования букв (a, d, f, n, p, s, t, x, z) в качестве параметров FOR или просто выберите букву параметра FOR в верхнем регистре.
Дж. Чомел
Привет @ 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, которая вам когда-либо понадобится, включая примеры правильного использования.

Mechaflash
источник
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 - это процесс, если логическое значение равно true, а goto open - процесс, если логическое значение равно false.

Марлон Ампун
источник
Это проще всего понять. Другие ответы почти не дают объяснения тому, что делают команды и флаги. Для парня только с 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
Rendell Tanyag
источник
5

Из FOR /?справки док:

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

% variable Указывает однобуквенный заменяемый параметр.
(set) Определяет набор из одного или нескольких файлов. Подстановочные знаки могут быть использованы. команда Определяет команду для выполнения для каждого файла.
command-parameters
Определяет параметры или параметры для указанной команды.

Чтобы использовать команду FOR в пакетной программе, укажите %% variable вместо
% variable. Имена переменных чувствительны к регистру, поэтому% 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)                                     
Kangaroo.H
источник