2015-05-08 2 views
2

У меня есть run-sh.bat, который пытается передать команды sh.exe из :Исключить пробелы в пакетном файле, который вызывает msysgit sh.exe?

rem My Batch File 
cmd /c " "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "%1" " 

Первый параметр передается в качестве команды. Простой рабочий пример:

run-sh.bat "' echo Hello '" 
... 
Hello 

Однако, если команда имеет путь с пробелами, то путь получает нарезанные на первое пространстве:

run-sh.bat "' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '" 
... 
C:\Windows\Path\That 

Теперь, если я просто вставить всю команду непосредственно в (вместо использования параметра):

rem My Batch File 
cmd /c " "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "%1" " 
cmd /c " "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c ""' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '"" " 

Тогда вы можете видеть, что для этого второго эха пути выходит прямо:

run-sh.bat "' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '" 
... 
C:\Windows\Path\That 
C:\Windows\Path\That Contains\Some Spaces\In\It 

Как я могу заставить его работать как параметр?

Должен ли я изменить ? Или измените способ форматирования параметра в командной строке?

+0

пытаются dequote параметр, а затем процитировал его снова - ' "% ~ 1" ' – npocmaka

+0

@npocmaka Я не уверен, что вы имеете в виду? Можете ли вы уточнить? – dtmland

+0

'% ~ 1' - означает первый аргумент без кавычек, если есть any.set, снова кавычки, чтобы быть уверенным, что он будет правильно передан следующему скрипту. Если у него есть кавычки уже с' "% 1", у вас будет дополнительный пара котировок, которая вызовет проблемы. – npocmaka

ответ

0

Испытанные решения:

Using CMD: 

    rem My Batch File 
    CMD /c ""%programfiles(x86)%\Git\bin\sh.exe" --login -i -c '%*'" 

You don´t have to use CMD /C though. You can run it directly to avoid extra quotes: 

    rem My Batch File 
    "%programfiles(x86)%\Git\bin\sh.exe" --login -i -c '%*' 

Затем, когда вы называете его, только использовать кавычки на пути:

run-sh.bat echo "C:\Windows\Path\That Contains\Some Spaces\In\It" 
Смежные вопросы