带有fileName的exec.Command失败包含两个空格

时间:2016-04-21 10:00:46

标签: windows go explorer

我想打开文件,其中包含来自Go {'1}}的资源管理器的两个空格。

此命令可以从Windows PowerShell中按预期工作。

exec.Command()

使用Go' Explorer "file://C:\Users\1. Sample\2. Sample2" 与fileName一起使用包含这样的空格。

exec.Command()

但是fileName包含两个这样的空格

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

请告诉我如何解决这个问题。

此代码按预期工作。感谢。

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

但实际输入是字符串(不是原始字符串文字),如下所示。所以我认为我需要将字符串转换为原始字符串。

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

1 个答案:

答案 0 :(得分:3)

文件名中有2个空格与无法运行命令无关。

您正在使用interpreted string literals

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

在解释的字符串文字中,反斜杠字符\是特殊的,如果您希望string有反斜杠,则必须将其转义,并且转义序列为2个反向:{{1} }:

\\

甚至更好:使用raw string literals(然后你不需要逃避它):

"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())会返回,请务必检查,因为它可能会提供其他信息。