Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Вложенный for для рекурсивного обхода папки

Ответить
Настройки темы
CMD/BAT - Вложенный for для рекурсивного обхода папки

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте!

Не работает вложенный цикл 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
Подскажите, пожалуйста, в чем проблема.

Отправлено: 23:07, 14-08-2018

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:49, 14-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 00:26, 15-08-2018 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата guest001:
Второй способ не подходит, поскольку помимо файлов нужна доп. обработка в контексте подпапки. »
Не вижу никакой проблемы получить в цикле разбора имя каталога из полного имени файла.

Отправлено: 02:16, 15-08-2018 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:40, 15-08-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 14:40, 15-08-2018 | #6


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 17:52, 15-08-2018 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Вложенный for для рекурсивного обхода папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - скрипт рекурсивного изменения размера изображений batyaPS Скриптовые языки администрирования Windows 23 23-01-2015 14:06
Доступ - [решено] Способы обхода закрытого реестра Игорь Анатольевич Microsoft Windows 2000/XP 21 12-12-2008 02:10
Java - Капча и способы её обхода. vaniak Программирование и базы данных 2 26-05-2008 17:47
Алгоритмы обхода матрицы mrcnn Программирование и базы данных 3 25-10-2006 22:07
Программные средства обхода firewall mzu Сетевые технологии 5 07-05-2004 23:37




 
Переход