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