繁体   English   中英

从C#运行复杂的命令行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM