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


265

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

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

Ответы:


348

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

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 char ( ^):

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

3
По крайней мере, для некоторых команд файловая переменная должна быть заключена в двойные кавычки.
Йирка

1
Зачем /fнужно после for? Согласно справочной документации, /fфлаг открывается и читает каждый файл. Это необходимо для эха или переименования файлов?
Снексе

17
/fПосле FORограничивает его файлы. Аналогично, /dограничивается каталогами (папками) и /rинструктирует его быть рекурсивным.

3
+1 Это живой ответ, к которому постоянно обращаются; большое спасибо.
Сабунку

4
Просто понял, что вы должны использовать обратные кавычки ... Вместо 'dir /b "c:\program files"'этого должно быть`dir /b "c:\program files"`
endavid

101

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

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

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


1
было трудно использовать пути с пробелами во 2-й оболочке cmd. В конце я настроил% PATH% env var, чтобы выполнить работу. Но спасибо. полезно
twobob

70

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

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

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

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

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

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

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

8
не просто, но и значительно более элегантно по сравнению с оценкой dir /Bрезультата for.
syneticon-dj

5
Добавьте a / r перед% f для просмотра подкаталогов
PRMan

35

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

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

с участием:

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

2
Я получаю ошибку: %%var was unexpected at this time.Можете ли вы привести точный пример? Я попробовал кучу вариацийfor /r . %%var in (*.*) do echo %%var
hippietrail

3
По какой-то странной причине имя переменной ограничено одним символом.
ollb

2
Можем ли мы использовать разные смайлики для разных результатов?
Серебро Кветтье


-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.