Как сделать что-то для каждого файла в каталоге с пакетом script

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Команда forfiles доступна в Windows Vista и выше.

Ответ 3

Самый простой способ:

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

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

Из пакетного файла (в два раза больше знаков%):

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

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

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

Ответ 4

Используйте

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

с:

  • путь является стартовым.
  • %% var - некоторый идентификатор.
  • *. * является файловой маской или содержимым переменной.
  • some_command - команда для выполнения с контуром пути и var, которые конкатенируются как параметры.

Ответ 5

По-другому:

for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"

Ответ 6

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