-
Pesquise seu% PATH% para cmd.cmd ou cmd.bat. Eles podem interferir no seu cmd
-
Execute Process Monitor e execute seu
cmd /c mklink. Examine o log do ProcMon para comandos realmente executados.
O utilitário CMD do Windows possui vários comandos internos, como mklink . Como eles podem ser usados a partir do msys shell?
De documentação de CMD , a opção /c pode ser usada para executar um comando e
Saída; mas isso não parece funcionar.
cmd /c mklink , o comando mklink não será executado e o CMD shell não será encerrado. Antes de pressionar Enter:

Depois:
Captura de tela do Process Process:
cmd /c mklink & aparentemente funciona - o comando mklink é executado, mas o shell CMD não é finalizado. Toda vez que Enter for pressionado, CMD se tornará o shell ativo. Pesquise seu% PATH% para cmd.cmd ou cmd.bat. Eles podem interferir no seu cmd
Execute Process Monitor e execute seu cmd /c mklink . Examine o log do ProcMon para comandos realmente executados.
win7 / cygwin / bash teve o mesmo problema, a solução é lançar cmd duas vezes,
e converta barras em barras invertidas conforme necessário por cmd (por exemplo):
REPO_DIR=${REPO_DIR////\} # Example, Turn c:/cvs into c:\cvs for cmd
cmd /C "cmd /C mklink /D .Repo $REPO_DIR" # launch cmd /C cmd /C cmd
Process Monitor helped track down the issue. It is that
msyswill convert/ctoc:\; it needs to be escaped:cmd //c mklink. The way these conversions are done is explained here. – Mihai Rotaru Jan 1 '13 at 21:32
Eu não consegui fazer isso funcionar com base em O comentário de Mihai sozinho, porque o caminho ainda continha barras / , e mklink reclamou que /msys64 não era uma opção válida.
Então escrevi um script em lote para que funcionasse.
Veja como eu chamo meu script em lote de MSYS:
$ mingw_ln.bat "$destination" "$targetpath"
E o script em lote usa esses dois caminhos e converte / para \ , usando a sintaxe de expansão do parâmetro :OLD=NEW para substituições de string. 1
set LINK=%1
set TARGET=%2
REM Convert POSIX paths to Windows paths
set LINK=%LINK:/=\%
set TARGET=%TARGET:/=\%
mklink /D %LINK% %TARGET%
1 Isso é semelhante à sintaxe ${PARAM:/OLD/NEW} do bash, para os que estão familiarizados com ele
Tags command-line msysgit msys