如果我在 Windows 中手动运行以下命令,它会正常运行并创建连接目录。
mklink /j "c:\Users\userid\OneDrive - Enterprise 365\backup\C\Users\userid\test" c:\Users\userid\test
但是,如果我使用 Go 以编程方式执行此操作,使用以下代码,它会返回
Local NTFS volumes are required to complete the operation.
mklink := "mklink /j \"c:\\Users\\userid\\OneDrive - Enterprise 365\\backup\\C\\Users\\userid\\test\\\" c:\\Users\\userid\\test"
cmd := exec.Command("cmd", "/c", mklink)
out, err = cmd.CombinedOutput()
我尝试了几种不同的方法,但总是得到相同的结果。
有什么想法吗?
我可以通过使用 PowerShell 来让它工作。
mklink := `New-Item -ItemType Junction -Path "c:\\Users\userid\OneDrive -
Enterprise 365\backup\C\Users\userid\test" -Target c:\\Users\userid\test`
cmd := exec.Command("PowerShell", "-Command", mklink)
out, err = cmd.CombinedOutput()
我假设问题在于 GoLang 发送嵌入引号的方式 -
cmd
错误地解释了它们。 PowerShell 似乎更“宽容”。
我注意到 Go 的版本,OneDrive 路径中的“test”后面有一个尾部反斜杠。这可能是一种微妙的 Windows 行为。
另一种可能性 - “mklink /j”需要提升的命令提示符。你的 Go 脚本是否在这样的管理模式窗口中运行?