Windows CMD-忽略引号内的空格
我知道这是一个非常琐碎的问题。我试过了,但失败了 虽然这与问题无关,但我尝试使用coverlet.console获得应用程序的代码覆盖率,如下所示: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 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不同,后者根据Unixexec
系统调用的要求将命令行解析为数组。您需要使用set
命令在cmd
中设置变量。请参阅set/?
谢谢Stephan。使用set
解决了这个问题。也从args内的变量中删除了%。