[英]Running complex command line from C#
我正在尝试从C#运行以下命令行:
Process.Start("C:\\Program Files\\GoToTags\\GoToTags Encoder\\GoToTags.Encoder.exe --records "{'Url':'http://petshop.intato.com/index.php?id='" + TxtBoxIDCode.Text + "'','RecordType':'Website'}"");
显然它不起作用。
问题是我需要保留诸如的适当符号,以使其正常工作。
原始命令是:
C:\Program Files\GoToTags\GoToTags Encoder\GoToTags.Encoder.exe --records "{'Url':'http://petshop.intato.com/index.php?id=29','RecordType':'Website'}"
我必须运行该命令,并同时用文本框的内容替换该29
有人可以帮助我吗?
string.Format命令是您的朋友...
string path = @"C:\Program Files\GoToTags\GoToTags Encoder\GoToTags.Encoder.exe";
string args = string.Format("--records \"{'Url':'http://petshop.intato.com/index.php?id={0}','RecordType':'Website'}\"", TxtBoxIDCode.Text);
Process.Start(path, args);
除了其他答案,您还应该使用Process.Start的两个参数重载。 第一个参数是可执行文件,第二个参数是命令行参数。
"\\"C:\\\\Program Files\\\\GoToTags\\\\GoToTags Encoder\\\\GoToTags.Encoder.exe\\" ...arguments here..."
但是,此形式不适用于Process.Start(string)
因为它特别不允许这样做。
您有几个陷阱在等着您。
首先,您已经发现,路径名中的反斜杠会导致字符串出现问题,因为它们也可能表示C#转义序列。 通常,对文件名使用C#的@"..."
语法是一种好习惯,部分是避免需要加倍反斜杠并使其更易于阅读,部分是因为您可能无意中在其中留下了\\t
,多年来一直未被注意。
其次,对Process.Start
的单参数调用仅接受一个命令-它不能接受命令参数-因此您必须调用两参数重载。
第三,需要处理records
参数值的引号,以便C#语法知道您想要的内容,即将它们传递给命令。 我将命令参数分为两部分,以使其更加清楚。 我选择使用反斜杠来转义它们,尽管使用替代@"...""..."
也是一样,并且选择很大程度上取决于个人喜好,除非上下文强烈地指向您一种方式而不是另一个。
string cmd = @"C:\Program Files\GoToTags\GoToTags Encoder\GoToTags.Encoder.exe";
string url = "http://petshop.intato.com/index.php?id=" + TxtBoxIDCode.Text;
string cmdArgs = "--records \"{'Url':'" + url + "','RecordType':'Website'}\"";
Process.Start(cmd, cmdArgs);
[编辑添加:]
如果由于某种原因,你觉得你要么想要或需要使用string.Format
来帮助你建立cmdArgs
,还有第四个疑难杂症的翅膀等你,在那string.Format
查找该括号( {
和}
)字符分隔插入参数规范,但您的records
命令行参数需要在字符串中使用大括号字符。 实现该目标的方法是将所需的花括号加倍,如下所示:
string cmdArgs =
string.Format("--records \"{{'Url':'{0}','RecordType':'Website'}}\", url)";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.