Переберите все файлы в каталоге, используя цикл for - PullRequest
303 голосов
/ 26 сентября 2008

Как я могу перебрать каждый файл в каталоге, используя цикл for?

А как я могу определить, является ли определенная запись каталогом или это просто файл?

Ответы [ 15 ]

431 голосов
/ 26 сентября 2008

Здесь перечислены все файлы (и только файлы) в текущем каталоге:

for /r %i in (*) do echo %i

Также, если вы запускаете эту команду в пакетном файле, вам нужно удвоить знак%.

for /r %%i in (*) do echo %%i

(спасибо @agnul)

198 голосов
/ 26 сентября 2008

Итерация по ...

  • ... файлы в текущем каталоге: for %f in (.\*) do @echo %f
  • ... подкаталоги в текущем каталоге: for /D %s in (.\*) do @echo %s
  • ... файлы в текущем и всех его подкаталогах: for /R %f in (.\*) do @echo %f
  • ... подкаталоги в текущем и всех подкаталогах: for /R /D %s in (.\*) do @echo %s

К сожалению, я не нашел способа перебирать файлы и подкаталоги одновременно.

Просто используйте cygwin с его bash для большей функциональности.

Кроме этого: Вы заметили, что встроенная справка MS Windows - отличный ресурс для описания синтаксиса командной строки cmd?

Также посмотрите здесь: http://technet.microsoft.com/en-us/library/bb490890.aspx

55 голосов
/ 26 сентября 2008

Существует небольшая разница между запуском FOR из командной строки и из пакетного файла. В пакетном файле необходимо поставить два % символа перед каждой ссылкой на переменную.

Из командной строки:

FOR %i IN (*) DO ECHO %i

Из пакетного файла:

FOR %%i IN (*) DO ECHO %%i
47 голосов
/ 10 мая 2016

Для перебора каждого файла будет работать цикл for:

for %%f in (directory\path\*) do ( something_here )

В моем случае я также хотел содержимое файла, имя и т. Д.

Это привело к нескольким проблемам, и я подумал, что мой вариант использования может помочь. Вот цикл, который читает информацию из каждого файла .txt в каталоге и позволяет вам что-то с ним делать (например, setx).

@ECHO OFF
setlocal enabledelayedexpansion
for %%f in (directory\path\*.txt) do (
  set /p val=<%%f
  echo "fullname: %%f"
  echo "name: %%~nf"
  echo "contents: !val!"
)

* Ограничение: val <= %% f получит только первую строку файла. </p>

40 голосов
/ 07 июля 2009

Этот цикл for выводит список всех файлов в каталоге.

pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd

"delims =" полезен для отображения длинных имен файлов с пробелами в нем ....

'/ b "показывать только имена, а не даты размера и т. Д.

Что нужно знать о аргументе dir's.

  • Любое использование «/ a» перечисляет все, включая скрытые и системные атрибуты.
  • "/ ad" будет показывать только подкаталоги, включая скрытые и системные.
  • Аргумент "/ a-d" удаляет содержимое с атрибутом 'D'.
  • "/ a-d-h-s" покажет все, кроме записей с 'D'irectory,' H'idden 'S'ystem.

Если вы используете это в командной строке, удалите «%».

Надеюсь, это поможет.

10 голосов
/ 26 сентября 2008

% 1 относится к первому переданному аргументу и не может использоваться в итераторе.

Попробуйте это:

@echo off
for %%i in (*.*) do echo %%i
5 голосов
/ 26 сентября 2008
for %1 in (*.*) do echo %1

Попробуйте "HELP FOR" в cmd для полного руководства

Это руководство для команд XP. http://www.ss64.com/nt/

3 голосов
/ 11 сентября 2014

Также можно использовать команду forfiles :

forfiles /s 

, а также проверьте, если это каталог

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
3 голосов
/ 28 сентября 2010

Следующий код создает файл с именем "AllFilesInCurrentDirectorylist.txt" в текущем каталоге, который содержит список всех файлов (только файлы) в текущем каталоге. Проверьте это

dir /b /a-d > AllFilesInCurrentDirectorylist.txt
2 голосов
/ 02 декабря 2016

попробуйте это:

::Example directory
set SetupDir=C:\Users

::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable 
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1

echo there are %counter% files in your folder

он считает .msi и .exe файлы в вашем каталоге (и в подкаталоге). Так что это также делает разницу между папками и файлами как исполняемыми файлами.

Просто добавьте расширение (.pptx .docx ..), если вам нужно отфильтровать другие файлы в цикле

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