Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Вложенный for для рекурсивного обхода папки (http://forum.oszone.net/showthread.php?t=336205)

guest001 14-08-2018 23:07 2826523

Вложенный 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

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

alpap 14-08-2018 23:49 2826525

Цитата:

Цитата guest001
в чем проблема. »

нет полного пути для 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 2826536

Спасибо, pushd решил проблему.

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

Iska 15-08-2018 02:16 2826542

Цитата:

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

Не вижу никакой проблемы получить в цикле разбора имя каталога из полного имени файла.

guest001 15-08-2018 13:40 2826637

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

Iska 15-08-2018 14:40 2826648

Цитата:

Цитата guest001
1. Придется отдельно запоминать, что такой каталог уже был. »

Ну, в принципе и это решаемо. Но да, возни будет больше.

Цитата:

Цитата guest001
2. Каталоги без файлов txt будут пропущены. »

А вот тут уже никак. Убедили ;).

megaloman 15-08-2018 17:52 2826680

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.

Время: 23:10.
© OSzone.net 2001-