Как сделать что-то для каждого файла в каталоге с помощью пакетного скрипта - PullRequest
245 голосов
/ 08 октября 2008

Как перебирать каждый файл в каталоге с файлом .bat или .cmd?

Для простоты предоставьте ответ, который просто повторяет имя файла или путь к файлу.

Ответы [ 6 ]

325 голосов
/ 08 октября 2008

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

for /f %f in ('dir /b c:\') do echo %f

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

for /f %%f in ('dir /b c:\') do echo %%f

Обновление : если каталог содержит файлы с пробелами в именах, необходимо изменить разделитель, используемый командой for /f. например, вы можете использовать символ трубы.

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

Обновление 2 : (быстро, через полтора года после первоначального ответа :-)) Если само имя каталога содержит пробел в имени, вы можете использовать опцию usebackq в for

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

А если вам нужно использовать перенаправление вывода или командный конвейер, используйте escape-символ (^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
94 голосов
/ 19 октября 2012

В качестве альтернативы используйте:

forfiles /s /m *.png /c "cmd /c echo @path"

Команда forfiles доступна в Windows Vista и более поздних версиях.

57 голосов
/ 08 ноября 2013

Самый простой метод:

Из командной строки используйте:

for %f in (*.*) do echo %f

Из пакетного файла (удвоить знаки процента процента):

for %%f in (*.*) do echo %%f

Из пакетного файла с папкой, указанной в качестве 1-го параметра:

for %%f in (%1\*.*) do echo %%f
33 голосов
/ 08 октября 2008

Использование

for /r path %%var in (*.*) do some_command %%var

с:

  • путь является начальным путем.
  • %% var - некоторый идентификатор.
  • *. * Является файловой маской ИЛИ содержимым переменной.
  • some_command - команда для выполнения с указанием пути и var в качестве параметров.
6 голосов
/ 18 апреля 2016

Другой способ:

for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
0 голосов
/ 15 мая 2013

У меня было вредоносное ПО, которое помечало все файлы в каталоге как скрытые / system / readonly. Если кто-то еще окажется в этой ситуации, перейдите в каталог и запустите for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...