-
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
msys
will convert/c
toc:\
; 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