2017-01-29 7 views
1

Я пытаюсь выполнить команду с git-bash с помощью cmd. Мне нужно передать команду для ее выполнения. Проблема в том, что мне нужно передать путь командного файла в команду, и в нем есть пробелы. Кажется, я не могу передавать кавычки в «cmd» таким образом, чтобы он это понимал.Выполнение команды с "cmd", которая содержит пробелы через Git-Bash?

cmd //C "c:\Program Files (x86)\another path\file.bat args && echo done"

Это даст мне ошибку:

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

Если я попробовать использовать одиночные кавычки, то она проходит буквальный обратный слэш CMD.

cmd //C '"c:\Program Files (x86)\another path\file.bat" args && echo done'

Который даст мне ошибку ту же ошибку, но показать обратный слэш:

'\"c:\Program Files (x86)\another path\file.bat\"' is not recognized as an internal or external command, operable program or batch file.

ответ

1

Для CMD/C, см "Bash in Git for Windows: Weirdness when running a command with CMD.exe /C with args"

Попробуйте использовать UNIX- , в двойных котировках

$ CMD //C "/c/Program Files (x86)/Opera/New folder/a.bat" 

(без && echo done)

Испытано с мерзавец версии 2.11.0.windows.1 на ОС Windows 10.

Примечание: Для простых команд, вы не нуждаетесь в CMD /C выполнить биту из мерзавца Баш сессия. В этом случае вы можете избежать пробелов и скобку:

[email protected] MINGW64 /c/Users/vonc 
$ /c/Program\ Files\ \(x86\)/Test/New\ folder/a.bt 

ОП добавляет в комментариях:

I want the environment variables to only exist on the one instance of cmd . I don't want it to actually set the environment variables in bash.
Which is why the " && " is necessary, as the other command would rely on those variables. That's the only command I need to rely on them for.
cmd /C "C:/path to/vcvarsall.bat && echo %LIB%" should print the env variable set by the batch file.
Then in git-bash I want echo $LIB to print nothing after executing the command.

echo %LIB% является сложным, так как сеанс CMD будет использовать эхо от Git, вместо echo встроенная команда CMD shell.
Но chaining multiple command in a CMD (адаптировано здесь Баш сессии Гит) осуществляется с помощью:

cmd //V //C "C:/path to/vcvarsall.bat&&set myvar" 

set myvar будет отображать значение, установленное для myvar скриптом битой.
И все же, еще в сеансе bash, echo ${myvar} ничего не отобразил.

+0

Пакетный скрипт не работает в git-bash. Если это помогает vcvarall.bat для визуальной студии. – user240713

+0

@ user240713 Какая ошибка у вас получается? – VonC

+0

Не совсем ошибка, так как пакетный скрипт ничего не делает, поэтому предполагается добавить переменные в среду. Я хотел использовать cmd, поскольку он работает там, но мне нужен бит «&&», поскольку программа должна запускаться в этой среде с загруженными символами. Это также было бы предпочтительным, поскольку я не хочу, чтобы переменные среды загружались в текущий bash, поскольку они вызывают конфликт. – user240713

0

И еще один простой способ - перейти к каталогу (используя команду cd), который содержит этот файл, а затем запустить команду и передать имя файла.

+0

Вам это не нужно: вы можете напрямую ссылаться на скрипт, не используя CMD или меняя путь. См. Мой ответ. – VonC

+0

Согласен! Но это может быть удобным способом для многих людей –