[英]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`
文件名中奇怪的2
字符也可能引起問題。 如果將其包含在Go源代碼中,它將被解釋並編碼為UTF-8字符串。 您將其作為參數傳遞,但是您的操作系統(Windows)在檢查文件名時可能使用不同的字符編碼,因此可能找不到。 如果更正字符串文字不足以使其起作用,請從文件名中刪除該奇怪的2
字符。
當您從PowerShell運行命令時,它可以工作,因為PowerShell不需要解釋的字符串,並且它使用的編碼也用於存儲文件名。
同樣, Cmd.CombinedOutput()
(就像Cmd.Run()
和Cmd.Start()
)返回error
,請確保檢查它是否可以提供其他信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.