У меня есть batch-filerun-sh.bat
, который пытается передать команды sh.exe
из msysgit:Исключить пробелы в пакетном файле, который вызывает 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
Теперь, если я просто вставить всю команду непосредственно в batch-file (вместо использования параметра):
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
Как я могу заставить его работать как параметр?
Должен ли я изменить batch-file? Или измените способ форматирования параметра в командной строке?
пытаются dequote параметр, а затем процитировал его снова - ' "% ~ 1" ' – npocmaka
@npocmaka Я не уверен, что вы имеете в виду? Можете ли вы уточнить? – dtmland
'% ~ 1' - означает первый аргумент без кавычек, если есть any.set, снова кавычки, чтобы быть уверенным, что он будет правильно передан следующему скрипту. Если у него есть кавычки уже с' "% 1", у вас будет дополнительный пара котировок, которая вызовет проблемы. – npocmaka