2014-10-29 4 views
4

У меня есть пакетный файл, который пытается выполнить следующие действия:Как запустить команду в пакетном файле, содержащем кавычки ("")?

FOR /F "tokens=1" %%G IN ('git show --pretty="format:" --name-only 54173344ab18a7d8e9ff2614cca62b671c8c7e2a') DO echo %%G 

что приводит к ошибке мерзавца «:„Формат“Недопустимое имя объекта со смертельным исходом.»

Однако, если я просто поместил команду в пакетный файл, я получаю вывод, который я ожидаю.

git show --pretty="format:" --name-only 54173344ab18a7d8e9ff2614cca62b671c8c7e2a 

Производит:

Files/MyFiles/header.html 
Files/MyFiles/foo.html 

вопрос что-то делать с кавычками "формат:".

Я попытался убежать от них, используя «», но безрезультатно. Я тоже пробовал ^. Я попытался использовать параметр usebackq.

Этот цикл также работает, если вы вынимаете аргумент --pretty = "format:", но затем я получаю кучу добавленного текста.

+0

Попробуйте использовать for/F usebackq tokens = 1 ... ', а затем используйте обратные вызовы вокруг вашей команды' git'. Обратные ссылки похожи на одинарные кавычки, которые у вас есть в настоящее время, но обходятся иначе. –

+1

Вам нужно избегайте символа '=' в команде, например '--pretty^=" format: "'. В противном случае я думаю, что все в порядке. – eryksun

+0

Чтобы увидеть это, я запустил тестовую партию под отладчиком ('cdb cmd/c test. cmd') и установите контрольную точку ('bp kernel32! CreateProcessW'), чтобы проверить командную строку, которая порождает ребенка (второй параметр x64:' du @ rdx'). – eryksun

ответ

1

Вы можете перенаправить вывод, который не должен вызывать проблемы:

git show --pretty="format:" --name-only 54173344ab18a7d8e9ff2614cca62b671c8c7e2a >> out.tmp 
FOR /F "tokens=1" %%G IN (out.tmp) DO echo %%G 
del out.tmp 

И это должно работать, перенаправив вывод в файл с именем out.tmp, а затем удалить его, когда вы закончите с ним.

Смежные вопросы