Windows批处理以递归方式扫描1级子文件夹中的文件

时间:2013-05-28 13:37:39

标签: batch-file

我有很多项目(比方说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)。我不希望这种情况发生。我只想通过项目文件夹查找文件(让我们说第一级的子文件夹)。谁能告诉我怎么能实现这个目标呢?

修改 我尝试了另一种方法:

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

但我不确定那种情况下的表现。

2 个答案:

答案 0 :(得分:1)

试试这个:

for /d /r "D:\Projects" %%i in (*) do (
    pushd "%%~i"
    echo(%%i|findstr /r "^.:\\[^\\]*\\[^\\]*$" >nul&&call sonar-runner.bat
    popd
)

答案 1 :(得分:0)

这样效率更高。

@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