windows batch за рекурсивно сканиране на файлове в подпапки на 1 ниво

Имам много проекти (да кажем D:\Projects\), всеки от които има своя собствена директория. В някои от директориите (не всички) има bat файл (sonar-runner.bat). Искам да напиша пакетен скрипт на Windows, за да стартирам тези .bat файлове последователно за всяка подпапка:

for /r %%i in (sonar-runner.bat) do (
@call "%%i"
pause
)
pause

Въпреки това, използвайки този подход, се сблъсках с проблем, при който се изпълняват същите файлове във вътрешните директории (например D:\Projects\Main\Inner\sonar-runner.bat). Не искам това да се случва. Искам да търся файл само през папки на проекти (да речем подпапки от 1-во ниво). Може ли някой да ми каже как мога да постигна това?

Редактиране Опитах друг подход:

for /D %%i in (*) do (
for %%j in (%%i\sonar-runner.bat) do (
    @call "%%j"
    pause
    )
)
pause

Но не съм сигурен за производителността в този случай.


person seeker    schedule 28.05.2013    source източник


Отговори (2)


Опитайте тази:

for /d /r "D:\Projects" %%i in (*) do (
    pushd "%%~i"
    echo(%%i|findstr /r "^.:\\[^\\]*\\[^\\]*$" >nul&&call sonar-runner.bat
    popd
)
person Endoro    schedule 28.05.2013
comment
всъщност не съм го пробвал, но изглежда добре, използвам собствен пример (след редакция) - person seeker; 28.05.2013
comment
Направих редакция, добавих findstr за изпълнение на bat само едно ниво на подпапка. - person Endoro; 28.05.2013

Това е много по-ефективно.

@echo off
pushd "d:\folder"
for /f "delims=" %%a in ('dir /ad /b ') do (
pushd "%%a"
if exist "sonar-runner.bat" call "sonar-runner.bat"
popd
)
popd
pause
person foxidrive    schedule 29.05.2013