go中执行xcopy时,报错如下:
源文件夹: "C:\workspace_go\test_pb" 目标文件夹 "C:\workspace_go\fff" os.Stat | err: CreateFile "C:\workspace_go\fff": The filename, directory name, or volume label syntax is incorrect.



具体原因不明,将\替换成/可解决
可加入/y参数自动确认,未加时报错如下
API server listening at: 127.0.0.1:20075
源文件夹: C:\workspace_go\test_pb
目标文件夹 C:\workspace_go\fff
windows
cmdOut: ???? C:\workspace_go\fff\Common.proto (Y:??/N:??/A:???)?
???? C:\workspace_go\fff\Common.proto (Y:??/N:??/A:???)?
cmd.Run() | err: exit status 2
--- FAIL: TestCopyDir (18.72s)
--- FAIL: TestCopyDir/case1 (18.72s)
utils_test.go:21: CopyDir() error = exit status 2, wantErr false
FAIL
Process exiting with code: 0
func CopyDir(src string, dst string) error {
// src = fmt.Sprintf(`‘%s‘`, src)
// dst = fmt.Sprintf(`‘%s‘`, dst)
src = strings.Replace(src, splitor, `\`, -1) // splitor = `\`
dst = strings.Replace(dst, splitor, `\`, -1)
// src = strings.Replace(src, `\`, splitor, -1)
// dst = strings.Replace(dst, `\`, splitor, -1)
fmt.Println("源文件夹:", src)
fmt.Println("目标文件夹", dst)
_, err := os.Stat(dst)
if err != nil {
if os.IsNotExist(err) {
os.MkdirAll(dst, os.ModePerm)
}
fmt.Printf("os.Stat | err: %v\n", err)
}
var cmd *exec.Cmd
var cmdOut bytes.Buffer
switch runtime.GOOS {
case "windows":
fmt.Println("windows")
cmd = exec.Command("xcopy", src, dst, "/I", "/E", "/-y")
cmd.Stdout = &cmdOut
e := cmd.Run()
fmt.Println("cmdOut: ", cmdOut.String())
if e != nil {
fmt.Printf("cmd.Run() | err: %v\n", e)
return e
}
case "darwin", "linux":
fmt.Println("darwin", "linux")
cmd = exec.Command("cp", "-R", src, dst)
}
outPut, e := cmd.Output()
if e != nil {
return e
}
fmt.Printf("output: %s\n", string(outPut))
return nil
}
原文:https://www.cnblogs.com/lurenjia1994/p/14626325.html