17

Утилита Windows CMD имеет ряд внутренних команд, таких как mklink . Как их можно использовать из оболочки msys ?

Из документации CMD ключ /c можно использовать для выполнения команды и выхода; но это не похоже на работу.

  • Если я выполняю команду cmd /c mklink mklink не выполняется и оболочка CMD не закрывается.

Перед нажатием Enter:

После:

Скриншот монитора процесса:

  • Попытка выполнить команду как фоновый процесс: cmd /c mklink & очевидно работает - mklink выполняется, но оболочка CMD не завершена. Каждый раз, когда нажимается Enter , CMD становится активной оболочкой.

3 ответа3

12
  1. Найдите в% PATH% cmd.cmd или cmd.bat. Они могут мешать вашему cmd

  2. Запустите Process Monitor и запустите ваш cmd /c mklink . Изучите журнал ProcMon для действительно выполненных команд.

2

В win7/cygwin/bash возникла та же проблема, решение состоит в том, чтобы дважды запустить cmd и преобразовать косые черты в обратную косую черту, если это необходимо для cmd (например): 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

1

Process Monitor помог отследить проблему. Дело в том, что msys преобразует /c в c:\ ; его нужно экранировать: cmd //c mklink . Способ, которым эти преобразования сделаны, объяснен здесь . - Михай Ротару 1 января '13 в 21:32

Я не мог заставить это работать на основе одного комментария Михая , потому что путь все еще содержал косые черты / в нем, и mklink жаловался, что /msys64 не был допустимым ключом.

Поэтому я написал пакетный скрипт, чтобы он заработал.

Вот как я называю свой пакетный скрипт из MSYS:

 $ mingw_ln.bat "$destination" "$targetpath"

И пакетный сценарий принимает эти два пути и преобразует / в \ , используя синтаксис расширения параметра :OLD=NEW для замены строк. 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 Это похоже на синтаксис bash ${PARAM:/OLD/NEW} для тех, кто с ним знаком

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .