Почему mklink /j работает при ручном вводе, но не при запуске с помощью exec.Command?

#go #command #mklink

#Вперед #команда #мклинк

Вопрос:

Если я вручную выполню следующую команду в Windows, она будет работать нормально и создаст каталог соединения.

 mklink /j "c:UsersuseridOneDrive - Enterprise 365backupCUsersuseridtest" c:Usersuseridtest
 

Но, если я делаю это программно с помощью 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()
 

Я пробовал это несколькими разными способами, но всегда получал один и тот же результат.

Есть какие-нибудь идеи?

Ответ №1:

Я смог заставить его работать, используя вместо этого PowerShell.

 mklink := `New-Item -ItemType Junction -Path "c:\UsersuseridOneDrive - 
Enterprise 365backupCUsersuseridtest" -Target c:\Usersuseridtest`

cmd := exec.Command("PowerShell", "-Command", mklink)
out, err = cmd.CombinedOutput()
 

Я предполагаю, что проблема заключалась в том, что GoLang отправлял встроенные цитаты — cmd интерпретировал их неправильно. PowerShell кажется гораздо более «снисходительным».