为什么 mklink /j 在手动输入时有效,但在使用 exec.Command 运行时无效?

问题描述 投票:0回答:2

如果我在 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()

我尝试了几种不同的方法,但总是得到相同的结果。

有什么想法吗?

go command mklink
2个回答
0
投票

我可以通过使用 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 似乎更“宽容”。


0
投票

我注意到 Go 的版本,OneDrive 路径中的“test”后面有一个尾部反斜杠。这可能是一种微妙的 Windows 行为。

另一种可能性 - “mklink /j”需要提升的命令提示符。你的 Go 脚本是否在这样的管理模式窗口中运行?

© www.soinside.com 2019 - 2024. All rights reserved.