簡體   English   中英

失敗的exec.Command和FileName包含兩個空格

[英]Failed exec.Command with fileName contain two spaces

我想用Go的exec.Command()從資源管理器打開包含兩個空格的文件。

該命令可以在Windows PowerShell中正常運行。

Explorer "file://C:\Users\1. Sample\2.  Sample2"

並且使用Go的exec.Command()與fileName一起包含這樣的空間。

exec.Command(`explorer`, "file://C:\Users\1. Sample").CombinedOutput()

但是失敗,fileName包含兩個這樣的空格

exec.Command(`explorer`, "file://C:\Users\1. Sample\2.  Sample2").CombinedOutput()

請告訴我如何解決這個問題。


此代碼按預期方式工作。 謝謝。

exec.Command(`explorer`, `file://C:\Users\1. Sample\2.  Sample2`).CombinedOutput()

但是實際輸入是字符串(不是原始字符串文字),如下所示。 所以我認為我需要將字符串轉換為原始字符串。

url := "file://C:\Users\1. Sample\2.  Sample2"

       <I need to convert to raw string literal?> 

result, err := exec.Command(`explorer`, url).CombinedOutput()

if err != nil {
    log.Fatal(err)
}

文件名中有2個空格與無法運行命令無關。

您正在使用解釋的字符串文字

"file://C:\Users\1. Sample\2.  Sample2"

在解釋的字符串文字中,反斜杠字符\\是特殊字符,如果希望string具有反斜杠,則必須對其進行轉義,轉義序列為2個反斜杠: \\\\

"file://C:\\Users\\1. Sample\\2.  Sample2"

甚至更好:使用原始字符串文字 (然后您無需轉義):

`file://C:\Users\1. Sample\2.  Sample2`

文件名中奇怪的字符也可能引起問題。 如果將其包含在Go源代碼中,它將被解釋並編碼為UTF-8字符串。 您將其作為參數傳遞,但是您的操作系統(Windows)在檢查文件名時可能使用不同的字符編碼,因此可能找不到。 如果更正字符串文字不足以使其起作用,請從文件名中刪除該奇怪的字符。

當您從PowerShell運行命令時,它可以工作,因為PowerShell不需要解釋的字符串,並且它使用的編碼也用於存儲文件名。

同樣, Cmd.CombinedOutput() (就像Cmd.Run()Cmd.Start() )返回error ,請確保檢查它是否可以提供其他信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM