【问题标题】:Recursively search files with filter on full path in batch file在批处理文件的完整路径上使用过滤器递归搜索文件
【发布时间】:2017-12-26 08:02:11
【问题描述】:

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

所以我尝试了这个命令:

dir /s /b Tests\Unit\*\Debug\bin\*.Tests.*.dll

但它失败了The filename, directory name, or volume label syntax is incorrect.

我之前找不到任何解决此问题的 SO 问题,但如果存在,请指出我。

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

for /f %%f in ('dir .\test\ /b /s *.Test.dll') do nunit-console /nologo /noshadow /framework:net-4.0 /xml:.\test\TestResults.xml "%%f"

在 linux 上,我会使用 ls -r ... | grep ... | xargs ...,我正在尝试在这里实现类似的目标。

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

【问题讨论】:

  • 我认为dir 不能与通配符(*) 一起使用,除了文件名或文件扩展名
  • 另外,*.Tests.*.dll 中的意思是 *.Tests. *.dll?空间有很大的不同。第一个搜索可以匹配如下文件:a.Test.b.dll(一个文件!),第二个匹配。 a.tests, b.dll
  • 嗯。顺便说一句,我不明白您的脚本想要匹配哪些文件夹和文件。第一句中的only这个词让我很困惑。
  • 我写了*.Tests.*.dll。你在哪里看到空间?
  • 哦,太好了。我困了……看错了,对不起:(

标签: windows batch-file recursion


【解决方案1】:
FOR /d %%a IN ("%sourcedir1%\*") DO DIR /s /b "%%~a\%sourcedir2%\*.exe" 2>nul

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

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

【讨论】:

    【解决方案2】:

    我找到了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,我可以将echo %f替换为运行nunit的命令。

    【讨论】:

    • 在第一句中,您的意思是Windows batch script 而不是DOS batch scriptDOS 是一个旧操作系统。 CMD 是您的命令提示符。
    • 我的意思是一个windows批处理脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多