Golang中处理带空格的文件夹或文件名的exec.Command问题 - os=windows
Golang中处理带空格的文件夹或文件名的exec.Command问题 - os=windows
我需要执行位于 C:\Program Files (x86)\appfolder\appname.exe 的文件。
我尝试这样做:
myApp := `"` + os.Getenv("PROGRAMFILES(X86)") + `\appfolder\appname.exe"`
此时 myApp 看起来像这样:
"C:\Program Files (x86)\appfolder\appname.exe"
现在我尝试用以下命令执行该应用:
cmd := exec.Command(myApp)
err := cmd.Run
if err != nil {
log.Fatal(err)
}
错误输出是:
exec: ""C:\Program Files (x86)\appfolder\appname.exe"": file does not exist
我不知道为什么 Go 会在我的变量开头添加 \"。
使用 cmd.Dir := os.Getenv("PROGRAMFILES(X86)") +\appfolder\appname.exe`` 也不起作用。
希望有人能帮助我。
更多关于Golang中处理带空格的文件夹或文件名的exec.Command问题 - os=windows的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我认为你应该尝试使用 []string 参数,而不是字符串?
更多关于Golang中处理带空格的文件夹或文件名的exec.Command问题 - os=windows的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢。😊 我尝试使用参数,但不起作用。😞 我现在正在寻找另一种解决方案来复制包含所有文件和子文件夹的目录。
我认为你需要在你的 myApp 变量中添加双反斜杠 “\\”,所以
myApp := os.Getenv("PROGRAMFILES(X86)") + "\\appfolder\\appname.exe"
你好,Yamil,首先感谢你的帮助。
不幸的是,这个解决方案也不起作用。我暂时通过调用一个Windows批处理文件解决了这个问题。
现在,我发现了另一个关于目录名中包含空格的问题。我尝试使用Windows命令xcopy.exe来复制一个包含空格的目录。
示例:
srcFolder := `"` + "C:\\My Temp Folder\\*.*" + `"`
desFolder := "C:\\NewFolder\\*.*"
command := "xcopy.exe ' + srcfolder + ' ' + destFolder + ' /s /y"
cmd := exec.Command("cmd", "/C", command)
output, err := cmd.Output()
if err != nil {
res = false
}
命令看起来像这样:
xcopy.exe "C:\My Temp Folder\*.*" C:\NewFolder\*.* /s /y 但是没有文件被复制。
xcopy.exe: 已复制 0 个文件。
如果我在Windows命令提示符窗口中输入命令的内容,它是可以工作的。
非常感谢任何帮助。
在Windows上使用exec.Command处理带空格的路径时,不应该在路径两端添加引号。Go的exec.Command会自动处理参数转义,手动添加引号会导致路径被错误解析。
正确的做法是将可执行文件路径作为第一个参数,而不是用引号包裹:
package main
import (
"log"
"os"
"os/exec"
)
func main() {
// 正确:直接拼接路径,不要加引号
myApp := os.Getenv("PROGRAMFILES(X86)") + `\appfolder\appname.exe`
cmd := exec.Command(myApp)
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
}
如果你需要传递参数给可执行文件,应该将它们作为单独的参数:
// 正确:可执行文件路径和参数分开
cmd := exec.Command(myApp, "--arg1", "value with spaces", "--arg2")
如果你需要设置工作目录,应该使用cmd.Dir字段:
// 设置工作目录
cmd := exec.Command("appname.exe")
cmd.Dir = os.Getenv("PROGRAMFILES(X86)") + `\appfolder`
err := cmd.Run()
错误信息中显示\"是因为Go将你添加的双引号作为路径的一部分进行了解析,导致系统找不到"C:\Program Files (x86)\appfolder\appname.exe"这个文件(包含引号的文件名),而不是C:\Program Files (x86)\appfolder\appname.exe。

