PDA

Показать полную графическую версию : Вложенный for для рекурсивного обхода папки


guest001
14-08-2018, 23:07
Здравствуйте!

Не работает вложенный цикл for рекурсивного обхода папки:


@echo off

setlocal enableextensions enabledelayedexpansion

rem идем по подпапкам в data:
for /d %%a in (data\*) do (

set DIR=%%a

rem работаем с !DIR! - пока все хорошо

rem но дальше мне нужно в текущей подпапке рекурсивно найти все файлы txt - не работает
for /r !DIR! %%i in (*.txt) do (

set TEXT_FILE=%%i

echo !TEXT_FILE!

)

)

endlocal


Подскажите, пожалуйста, в чем проблема.

alpap
14-08-2018, 23:49
в чем проблема. »
нет полного пути для for /r !DIR!
лучше:

@echo off
for /d %%a in (data\*) do (
pushd "%%a"
for /r %%i in (*.txt) do echo %%i
popd
)
pause

а если нужны лишь файлы, то чего вообще не так?

@echo off
for /f "delims=" %%a in ('dir /a-d/b/s "data\*.txt"') do echo %%a
pause

guest001
15-08-2018, 00:26
Спасибо, pushd решил проблему.

Второй способ не подходит, поскольку помимо файлов нужна доп. обработка в контексте подпапки.

Iska
15-08-2018, 02:16
Второй способ не подходит, поскольку помимо файлов нужна доп. обработка в контексте подпапки. »
Не вижу никакой проблемы получить в цикле разбора имя каталога из полного имени файла.

guest001
15-08-2018, 13:40
Да, но это имя каталога я получу столько раз, сколько было найдено файлов. А это плохо, поскольку:
1. Придется отдельно запоминать, что такой каталог уже был.
2. Каталоги без файлов txt будут пропущены.

Iska
15-08-2018, 14:40
1. Придется отдельно запоминать, что такой каталог уже был. »
Ну, в принципе и это решаемо. Но да, возни будет больше.

2. Каталоги без файлов txt будут пропущены. »
А вот тут уже никак. Убедили ;).

megaloman
15-08-2018, 17:52
guest001, Можно и без Pushd@Echo Off
cls

For /D %%a In ("Data\*") Do (
Echo %%a
For /F "usebackq delims=" %%i IN (`2^>nul Dir /A:-D /S /B "%%a\*.txt"`) DO Echo %%i
)

Pause




© OSzone.net 2001-2012