如何使用exec.command启动带空格的文件?添加引号似乎不起作用,也没有#34;或%20而不是空格。
package main
import (
"fmt"
"os/exec"
)
func main() {
StartProcess("C:\\File With Spaces.txt")
}
func StartProcess(Filename string) {
Filename = "\"" + Filename + "\""
cmd := exec.Command("cmd","/C start",Filename)
err := cmd.Start()
if err!=nil{
fmt.Println(err)
}
}
答案 0 :(得分:1)
如果您尝试在Windows上运行可执行文件,则不需要命令提示符。您只需将可执行路径传递给shell,它就会触发。
E.g:
func StartProcess(Filename string) {
// Filename = "cmd /C start \"" + Filename + "\""
cmd := exec.Command(Filename)
err := cmd.Start()
if err!=nil{
fmt.Println(err)
}
}
StartProcess("C:\\path to executable\\executable.exe")
也就是说,通常在Windows上启动可执行文件的所有框架(Go似乎包含在此中),在尝试连接自己的参数时会遇到麻烦。这就是args
的{{1}}参数是可变参数的原因。所以你原来应该是这样的:
exec.Command
答案 1 :(得分:1)
这样可行,但仅限于Windows
cmd := exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", Filename)
答案 2 :(得分:0)
您需要cmd.Wait
并检查您的方法返回的任何错误
package main
import (
"bytes"
"log"
"os"
"os/exec"
)
func main() {
args := os.Args
cmd := exec.Command(args[1], args[2:]...)
var b bytes.Buffer
cmd.Stdout = &b
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
if err := cmd.Wait(); err != nil {
log.Fatal(err)
}
if _, err := os.Stdout.Write(b.Bytes()); err != nil {
log.Fatal(err)
}
}