Как запустить внутреннюю команду cmd из оболочки msys?

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

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

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

перед нажатием Введите:

enter image description here

после:

enter image description here

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

enter image description here

  • пытаюсь выполнить команду в фоновом режиме: cmd /c mklink & видимо, работает -mklink команда выполняется, но CMD оболочка не завершена. Каждый раз Enter нажата, CMD станет активной оболочки.
21
задан Mihai Rotaru
12.04.2023 23:20 Количество просмотров материала 3110
Распечатать страницу

3 ответа

  1. Поиск% PATH % для cmd.cmd или cmd.летучая мышь. Они могут помешать вашему cmd

  2. Run Контролировать Процесс и запустите cmd /c mklink. Проверьте журнал ProcMon для действительно выполненных команд.

12
отвечен Maximus 2023-04-14 07:08

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

2
отвечен mosh 2023-04-14 09:25

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

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

так я написал пакетный скрипт, чтобы заставить его работать.

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

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

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

1
отвечен jpaugh 2023-04-14 11:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх