2014-11-11 3 views
0

Я пытаюсь запустить рекурсивный цикл над несколькими каталогами. Это работает:Вложенный каталог Поиск в пакетном файле

FOR /R "Dir1" %%f IN (*.c *.cpp *.h) DO (
    echo %%f 
) 
FOR /R "Dir2" %%f IN (*.c *.cpp *.h) DO (
    echo %%f 
) 

Но так как это глупо (echo часть фактически является блок команд, а количество каталогов велико), я попытался это:

FOR %%d IN (Dir1 Dir2) DO (
    FOR /R "%%d" %%f IN (*.c *.cpp *.h) DO (
    echo %%f 
) 
) 

Который не сделал (он ничего не запускал). Есть ли способ заставить это работать?

ответ

2

По какой-то причине FOR /R не любит параметры расширенного расширения в качестве пути поиска. Я запустил ProcMon и обнаружил, что cmd.exe на самом деле пытается получить доступ к файлу/директории с именем %d!

Одна зарегистрированная функция /R заключается в том, что если вы не укажете каталог, она будет искать CWD. Я использовал это, чтобы придумать измененную форму вашего скрипта, который, как представляется, функционирует.

FOR %%d IN (Dir1 Dir2) DO (
    PUSHD "%%~d" 
    FOR /R %%f IN (*.c *.cpp *.h) DO (
     ECHO %%f 
    ) 
    POPD 
) 

FWIW, ради сценария ремонтопригодности, если бы было больше, чем несколько директорий, а не перечислять их в команде, я бы поставил каталоги для поиска в отдельном текстовом файле и использовать FOR /F итерировать Над ними. Возможно, вы только написали это так, чтобы обеспечить минимальный рабочий пример.

Смежные вопросы