2014-10-08 2 views
1

Я не могу найти конкретное упоминание о моей проблеме, хотя, похоже, это была бы общая проблема.Как рекурсивно прокручивать каталог по определенному типу файлов?

Я пытаюсь пропустить все пакетные файлы в каталоге, независимо от глубины.

Вот что у меня есть:

for /f "tokens=* delims=" %%a in ('dir %DIR% /s /b *.bat') do (
    if not exist %%a\* echo %%a 
) 

Где DIR установлен заранее. Я повторяю только файлы.

Очевидно, что это неправильно, поскольку он выводит сначала все файлы, ТОГДА все пакетные файлы.

Кажется, мне нужно как-то объединить спецификатор * .bat и переменную% DIR%, но я не уверен, как это сделать.

ответ

1
for /r %DIR% %%a in (*.bat) do (... 
+0

Это сработало для меня. Мне любопытно увидеть рассуждения, стоящие за двумя ответами, - это кажется намного проще. Любые вклады по этой теме? – Rail24

+0

@ Rail24 - Этот метод является предпочтительным, если DO не изменяет список деревьев, поскольку он работает быстрее и работает с unicode в именах файлов. Но предположим, что DO добавляет новые файлы, тогда эти вновь созданные файлы также могут быть итерированы, в зависимости от того, как они сортируются и насколько велик внутренний буфер. FOR/F с DIR/S/B/A-D требуется, если DO изменяет или добавляет файлы, поскольку он кэширует результат всего списка, прежде чем он начнет итерацию. Но FOR/F не очень хорошо работает с unicode. – dbenham

1

Вы вопрос несколько расплывчато для меня, но я думаю, что это то, что вы хотите:

@echo off 
setlocal 

set DIR=h:\scripts 

for /f "usebackq delims=;" %%q in (`dir %DIR%\*.bat /s/b/a-d`) do (
    echo %%q 
) 

endlocal 

Это помещает все .bat файлы в %%q.

+0

Проблема здесь в файлах с пробелами в них. Раньше казалось, что 'delims =' решил эту проблему. Есть идеи? – Rail24

+0

Я добавил в delims =; так что пробелы включены в имя файла – jftuga