在批处理文件中以完整路径递归搜索带有过滤器的文件

时间:2017-07-20 14:36:52

标签: windows batch-file recursion

我可以使用dir /s /b *.Tests.*.dll递归查找与该模式匹配的所有文件,但只有在\bin\Debug\而不是\obj\Debug\或{{1}时才需要找到它们}。

所以我尝试了这个命令:

\bin\Release

但它失败了dir /s /b Tests\Unit\*\Debug\bin\*.Tests.*.dll

我无法找到任何解决此问题的SO问题,但如果存在,请指向我。

有没有办法达到预期的效果(在整个路径上应用过滤器)?我的目的是使用该列表在jenkins项目中的每个单元测试程序集上运行NUnit,使用Use NUnit Console Runner to run all tests under a folder中的此命令

The filename, directory name, or volume label syntax is incorrect.

在Linux上,我会使用for /f %%f in ('dir .\test\ /b /s *.Test.dll') do nunit-console /nologo /noshadow /framework:net-4.0 /xml:.\test\TestResults.xml "%%f" ,我试图在这里尝试类似的东西。

我也只需要在父文件夹上应用这个额外的过滤器。如果不可能,我将不得不使用PowerShell。

2 个答案:

答案 0 :(得分:1)

FOR /d %%a IN ("%sourcedir1%\*") DO DIR /s /b "%%~a\%sourcedir2%\*.exe" 2>nul

其中sourcedir1\*\sourcedir2之后所需路径的一部分。

只需将每个目录依次分配给%%a,并将其用作第二个dir

的起点

答案 1 :(得分:0)

我找到DOS batch script with for loop and pipe,并在那里使用这个想法构建了这个命令:

for /f %f in ('dir /s /b Tests\Unit ^| findstr \\bin\\Debug\\.*\.Tests\..*\.dll$"') do echo %f

不,我只需要将%f替换为%%f批处理文件,我可以使用运行nunit的命令替换echo %f