Поиск…


Синтаксис

  • для / l %% p in (startNumber, increment, endNumber) do command
  • for / f %% p in (filename) do command
  • for / f %% p in ("textStrings") делает команду
  • for / f %% p in ('command') do command
  • for / r drive: \ path %% p in (set) do command
  • for / d %% p in (directory) do command

замечания

Команда for принимает опции при использовании флага /f . Вот список вариантов, которые можно использовать:

  • delims=x Делимитирующий символ (ы) для разделения токенов

  • skip=n Количество строк для прокрутки в начале файла и текстовых строк

  • eol=; Символ в начале каждой строки, чтобы указать комментарий

  • tokens=n Нумерованные позиции для чтения из каждой строки или строки для обработки

  • usebackq Использовать другой стиль цитирования:

    Используйте двойные кавычки для длинных имен файлов в "файлах"

    Используйте одиночные кавычки для 'textStrings'

    Использовать обратные кавычки для `command`

Пересечение каждой строки в наборе файлов

Следующее будет отображать каждую строку в файле C:\scripts\testFile.txt . Пустые строки не будут обрабатываться.

for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
  echo %%A
  rem do other stuff here
  )

Более подробный пример показывает, как производные в цикле FOR из данных с ограниченными файлами могут использоваться для перенаправления пакетного выполнения при сохранении искомого содержимого в файл:

@echo off
setlocal enabledelayedexpansion

for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
    set "last=%temp%\%%i"
    type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
     && (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))

:: add user tasks code here
if defined result echo Performing user tasks...

:end    
echo All tasks completed
exit /b

Обратите внимание, как долго командные строки разделяются на несколько строк кода, а группы команд разделяются скобками.

Рекурсивно посещать каталоги в дереве каталогов

команда for /r может использоваться для рекурсивного посещения всех каталогов в дереве каталогов и выполнения команды.

@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
  rem enter the directory
  pushd %%a
  echo In directory:
  cd
  rem leave the directory
  popd
  )

Заметки:

  • for / r - Прокрутка файлов (вложенные папки Recurse).
  • pushd - изменить текущий каталог / папку и сохранить предыдущую папку / путь для использования командой POPD.
  • popd - сменить каталог обратно на путь / папку, которая была недавно сохранена командой PUSHD.

Переименование всех файлов в текущем каталоге

Следующая функция использует переменную с циклом for для переименования группы файлов.

SetLocal EnableDelayedExpansion

for %%j in (*.*) do (
  set filename=%%~nj
  set filename=!filename:old=new!
  set filename=Prefix !filename!
  set filename=!filename! Suffix
  ren "%%j" "!filename!%%~xj"
  )

Определив имя переменной %%j и связав ее со всеми текущими файлами (*.*) , Мы можем использовать переменную в цикле for для представления каждого файла в текущем каталоге.

Каждая итерация (или прохождение) через цикл обрабатывает другой файл из определенной группы (который может быть одинаково любой группой, например *.jpg или *.txt ).

В первом примере мы подставляем текст: текстовая строка «old» заменяется текстовой строкой «new» (если, но только если в имени файла присутствует текст «old»).

Во втором примере мы добавляем текст: текст «Префикс» добавляется к началу имени файла. Это не замена. Это изменение будет применено ко всем файлам в группе.

В третьем примере снова мы добавляем текст: текст «Суффикс» добавляется в конец имени файла. Опять же, это не замена. Это изменение будет применено ко всем файлам в группе.

Последняя строка фактически обрабатывает переименование.

итерация

for /L %%A in (1,2,40) do echo %%A

Эта строка будет итерации от 1 до 39, увеличиваясь на 2 каждый раз.

Первый параметр, 1 , является стартовым номером.

Второй параметр, 2 , является приращением.

Третий параметр, 40 , является максимальным.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow