启动命令行处理转义字符

时间:2014-02-06 20:35:10

标签: c# string command-line escaping

我有命令行参数(在C#中启动):

 fijiCmdText = string.Format("/C \"\"{0}\" -macro \"{1}\" \"{2}\" {3} \"{4}\" {5} {6}", _fijiExeFile, _ijmFile, _inputDir, redirStr, _logFile, headlessOption, resStr);

其中string是用字符串构建的,唯一的问题来自第三和第四个字符串:_inputDirredirStr。他们实际上是

_inputDir = "D:\\fiji\\blobimg\\";
redirStr = ">";
_logFile = "D:\\fiji\\blobimg\\log.txt";

如果命令参数如上所述,那么由该命令行启动的脚本接收的实际_inputDir将是

D:\fiji\blobimg"

但如果我将参数更改为

 fijiCmdText = string.Format("/C \"\"{0}\" -macro \"{1}\" \"{2} {3} \"{4}\" {5} {6}", _fijiExeFile, _ijmFile, _inputDir, redirStr, _logFile, headlessOption, resStr);

收到的实际字符串将是(问题,这里是第三个字符串干扰第四个字符串,它不应该

D:\fiji\blobimg\ > D:\fiji\blobimg\Output\log.txt

我真的想拥有,既没有"也没有,也没有跟随下面的字符串。

D:\fiji\blobimg\

那么我应该如何更改命令行的参数以使其工作?

编辑:希望这是有用的信息

fijiCmdText = string.Format("/C \"{0}\"", _fijiExeFile);

将会运行,

但是

fijiCmdText = string.Format("/C \"{0}\" -macro \"{1}\" \"{2}\", _fijiExeFile, _ijmFile, _inputDir);

运行。我不知道为什么。很奇怪。我想我遵守所有规则,但它没有用。

1 个答案:

答案 0 :(得分:-1)

我认为你的问题在你的第一名持有人之前是额外的\"

尝试:

var fijiCmdText = string.Format("/C \"{0}\" -macro \"{1}\" \"{2}\" {3} \"{4}\" {5} {6}", _fijiExeFile, _ijmFile, _inputDir, redirStr, _logFile, headlessOption, resStr);

查看this fiddle已记录的文本看起来对我来说是命令行。

/C "foo" -macro "bar" "D:\fiji\blobimg\" > "D:\fiji\blobimg\log.txt" headless resStr
相关问题