Пакет Windows для рекурсивного сканирования файлов в подпапках 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