我试图从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替换为文本框的内容
有人能帮助我吗?
答案 0 :(得分:1)
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);
答案 1 :(得分:0)
除了其他答案之外,你应该使用Process.Start的双参数重载。第一个参数是可执行文件,第二个参数是命令行参数。
<小时/> 通常,如果您坚持使用单个参数调用,则应将可执行文件括在双引号中,如下所示:
"\"C:\\Program Files\\GoToTags\\GoToTags Encoder\\GoToTags.Encoder.exe\" ...arguments here..."
但是,此表单对Process.Start(string)
无效,因为它明确禁止它。
答案 2 :(得分:0)
你有几个等待你的陷阱。
首先,正如您已经发现的那样,路径名中的反斜杠会导致字符串出现问题,因为它们也可能表示C#转义序列。对文件名使用C#@"..."
语法通常是一种好习惯,部分原因是为了避免需要加倍反斜杠并使其更易于阅读,部分原因是您可能无意中留下了{ {1}}在那里,它会被忽视多年。
其次,对\t
的单参数调用只接受一个命令 - 它不能接受命令参数 - 所以你必须调用双参数重载。
第三,Process.Start
参数值的引号需要处理,以便C#语法知道你想要什么 - 即将它们传递给命令。我已将命令参数分成两部分以使其更清晰。我选择使用反斜杠来逃避它们,尽管使用替代records
也同样好,并且选择主要取决于个人偏好,除非上下文强烈指向一种方式而不是另一种方式。
@"...""..."
[编辑添加:]
如果由于某种原因你发现你想要或需要使用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
,那么第四个问题就在你身边等待{{1}查找大括号(cmdArgs
和string.Format
)字符来分隔插入参数规范,但是{
命令行参数需要字符串中的大括号字符。实现这一目标的方法是将所需的大括号加倍,如下所示:
}