簡體   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