Вложенный for для рекурсивного обхода папки
Здравствуйте!
Не работает вложенный цикл 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
Подскажите, пожалуйста, в чем проблема.
|
нет полного пути для 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
|
Спасибо, pushd решил проблему.
Второй способ не подходит, поскольку помимо файлов нужна доп. обработка в контексте подпапки.
|
Цитата:
Цитата guest001
Второй способ не подходит, поскольку помимо файлов нужна доп. обработка в контексте подпапки. »
|
Не вижу никакой проблемы получить в цикле разбора имя каталога из полного имени файла.
|
Да, но это имя каталога я получу столько раз, сколько было найдено файлов. А это плохо, поскольку:
1. Придется отдельно запоминать, что такой каталог уже был.
2. Каталоги без файлов txt будут пропущены.
|
Цитата:
Цитата guest001
1. Придется отдельно запоминать, что такой каталог уже был. »
|
Ну, в принципе и это решаемо. Но да, возни будет больше.
Цитата:
Цитата guest001
2. Каталоги без файлов txt будут пропущены. »
|
А вот тут уже никак. Убедили ;).
|
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
|
Время: 23:10.
© OSzone.net 2001-