批处理 - 如何在其他引号中传递带引号的参数

Batch - How to pass argument with quotes within other quotes

我正在使用 dotCover 命令行工具 运行 覆盖某些测试。 为了让它 运行 它需要接收 "Target executable" 的路径作为参数,在我的例子中是 Nunit 和“Target Arguments” 在我的例子中是我传递给的参数尼尼特。 问题是我传递给 Nunit 的参数之一是带有空格的路径。当我将 Nunit 的参数传递给 dotCover 时,它也被引号包围,因为它有空格。 因此,例如 运行 简单地在 nunit 上测试我 运行 命令:

"%NunitDir%\nunit-console-x86.exe" /nologo /noshadow "%DllDir%\Tests.dll" 
 /config=Release /domain=%Domain% /xml=%resultDir%\NUnitTestResults.xml

为了 运行 覆盖测试,我需要 运行 像这样的东西:

set NunitArgs=/nologo /noshadow "%DllDir%\Tests.dll" 
 /config=Release /domain=%Domain% /xml=%resultDir%\NUnitTestResults.xml

%dotCoverDir%\dotCover.exe cover /TargetExecutable="%NunitDir%\nunit-console-x86.exe" 
 /TargetArguments="%NunitArgs%" /Output="%outputDir%\NUnitTestResults.xml" 

问题是 NunitArgs 已经包含引号,当我 运行 dotCover 命令时,它只读取从第一个引号到第二个引号的参数。

试试 /TargetArguments="%NunitArgs:"=""%" 甚至 /TargetArguments="""%NunitArgs:"=""%"""

阅读 How Command Line Parameters Are Parsed by David Deley © 2009 (Updated 2014) (especially Windows®: 4. Everyone Parses Differently)。祝你好运!