Как вы перебираете каждый файл в каталоге с файлом .bat или .cmd?
Для простоты предоставьте ответ, который просто повторяет имя файла или путь к файлу.
Как вы перебираете каждый файл в каталоге с файлом .bat или .cmd?
Для простоты предоставьте ответ, который просто повторяет имя файла или путь к файлу.
Использование командной строки:
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
/f
после for
? Согласно справочной документации, флаг /f
открывает и читает каждый файл. Это нужно для отображения или переименования файлов?
- person Snekse; 25.06.2012
/f
после FOR
ограничивает его файлами. Точно так же /d
ограничивает каталогами (папками), а /r
указывает, что это будет рекурсивно.
- person ; 07.08.2012
C:\Program Files>for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
, но всегда получаю сообщение %% f было неожиданным в это время .. Почему? Что случилось?
- person Dai; 05.04.2015
dir /b
возвращает только имя файла. Однако использовать конкатенацию для добавления имени каталога в операцию после do
тривиально. Не нужно переходить в каталог.
- person Franci Penov; 30.10.2015
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files\*.DWG"') do echo %%f
- ›это должно сработать, хотя сейчас у меня нет компьютера с Windows для проверки.
- person Franci Penov; 04.02.2016
dir /b "c:\program files"
, а не фактический список файлов :(
- person endavid; 08.08.2016
'dir /b "c:\program files"'
должно быть `dir /b "c:\program files"`
- person endavid; 08.08.2016
do echo "%%f`"
. Если у вас нет кавычек, вы попытаетесь выполнить команду с пробелом. Например, start "hello world.bat"
- допустимая команда, а start hello world.bat
- нет.
- person Jacob Ward; 07.03.2021
В качестве альтернативы используйте:
forfiles /s /m *.png /c "cmd /c echo @path"
Команда forfiles доступна в Windows Vista и более поздних версиях.
Самый простой способ:
В командной строке используйте:
for %f in (*.*) do echo %f
Из пакетного файла (удвойте знаки процента):
for %%f in (*.*) do echo %%f
Из пакетного файла с папкой, указанной как 1-й параметр:
for %%f in (%1\*.*) do echo %%f
dir /B
с помощью for
.
- person syneticon-dj; 22.01.2014
Использовать
for /r path %%var in (*.*) do some_command %%var
с участием:
%%var was unexpected at this time.
Можете привести точный пример? Перепробовал кучу вариантов for /r . %%var in (*.*) do echo %%var
- person hippietrail; 20.11.2012
Другой путь:
for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
"%~nf"
- имя файла без расширения, где f
- имя переменной, указанной в части for
. Документы: docs.microsoft.com/en-us/previous-versions/windows/it-pro/
- person Slava; 27.04.2018
У меня была вредоносная программа, которая пометила все файлы в каталоге как скрытые / system / readonly. Если кто-то еще окажется в такой ситуации, перейдите в каталог и запустите for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f
.