所以我正在构建一个通过 cmd.exe 运行的命令。但是由于某些目录名称中的空格,该命令似乎失败了。
process.StandardInput.WriteLine(this.phpPath + " " + this.phpUnitPath + " " + itemChecked);
只需将路径放在双引号之间:
string command = "\"" + someFilePathWithSpaces + "\"";
在命令行中传递带空格的文本的典型方法是将其用引号括起来,如下所示:
app "c:\my apps\blah.exe" "some argument"
尝试做这样的事情:
string path = this.phpPath + " " + this.phpUnitPath + " " + itemChecked
string cmd = string.Format("\""{0} {1} {2}"\"",
this.phpPath, this.phpUnitPath, itemChecked);
您说您正在使用cmd.exe
,但您正在将数据写入 aProcess
的标准输入。我假设这process
是你已经开始的一个cmd.exe
实例。
一个可能更好的方法是使用/C
开关:
C:\Users\Jonathon>cmd /?
Starts a new instance of the Windows command interpreter
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OF
[[/S] [/C | /K] string]
/C Carries out the command specified by string and then terminates
...
无论哪种方式,所有带有空格的路径都需要用引号引起来。
最后一点,你确定你甚至需要使用cmd.exe
吗?为什么不直接执行你真正想要运行的程序呢?
在以下语句中的第一个数组中放置任意数量的部分路径:
var path=String.Join((new[] { this.phpPath, this.phpUnitPath, itemChecked }).Aggregate((a, b) => a+"\x20"+b), new[] { '\"', '\"' });