Windows CMD-忽略引号内的空格

Windows CMD-忽略引号内的空格,windows,cmd,code-coverage,coverlet,Windows,Cmd,Code Coverage,Coverlet,我知道这是一个非常琐碎的问题。我试过了,但失败了 虽然这与问题无关,但我尝试使用coverlet.console获得应用程序的代码覆盖率,如下所示: coverlet someapp.dll --targetargs "vstest someapp.dll --logger:trx;LogFileName=someapp.trx" vstest = "C:\Program Files (x86)\[...path]\vstest.console.exe" coverlet someapp.dl

我知道这是一个非常琐碎的问题。我试过了,但失败了

虽然这与问题无关,但我尝试使用coverlet.console获得应用程序的代码覆盖率,如下所示:

coverlet someapp.dll --targetargs "vstest someapp.dll --logger:trx;LogFileName=someapp.trx"
vstest = "C:\Program Files (x86)\[...path]\vstest.console.exe"
coverlet someapp.dll --targetargs "%vstest% someapp.dll --logger:trx;LogFileName=someapp.trx"
targetargs是从coverlet内部调用的。 这里,vstest是主机系统中的一个环境变量。但是,我不能也不想设置该env变量,因此我尝试使用exe的路径直接调用,如下所示:

coverlet someapp.dll --targetargs "vstest someapp.dll --logger:trx;LogFileName=someapp.trx"
vstest = "C:\Program Files (x86)\[...path]\vstest.console.exe"
coverlet someapp.dll --targetargs "%vstest% someapp.dll --logger:trx;LogFileName=someapp.trx"
现在,我无法使用此变量访问该exe,因为路径中的空格不会被忽略

我可以在这里做什么来获取参数字符串中的exe文件

更新:

根据评论,这样做我能够达到预期的结果

set vstest = "C:\Program Files (x86)\[...path]\vstest.console.exe"
coverlet someapp.dll --targetargs "vstest someapp.dll --logger:trx;LogFileName=someapp.trx"

这看起来不像
cmd
语法。也许是地狱?定义变量
$vstest
时,应将其与
$vstest
一起使用,而不是
vstest
。(使用
cmd
中的变量就像使用
%variable%
)谢谢。在撰写问题时忽略了这些更改。的确是CMD syntac。编辑它。我希望问题现在清楚了。在CMD中,除了
%
,双引号禁用对特殊字符(如
&
)的求值,并忽略外部命令可执行路径中的空格。但是双引号仍然在命令行中按字面意思传递,而命令行就是传递给
CreateProcessW
的对象。解析命令行完全取决于子进程,例如“coverlet”。这与Unix中的shell不同,后者根据Unix
exec
系统调用的要求将命令行解析为数组。您需要使用
set
命令在
cmd
中设置变量。请参阅
set/?
谢谢Stephan。使用
set
解决了这个问题。也从args内的变量中删除了%。