批处理 - 如何在其他引号中传递带引号的参数
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)。祝你好运!
我正在使用 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)。祝你好运!