2015-06-29 4 views
1

У меня есть список команд (сгенерированных nmake и полученных с помощью трассировки событий), которые я хочу запустить. Очевидный способ сделать это - поместить их в пакетный файл. Это прекрасно работает для простых команд, но потом один из них оказался следующим:Экранирование всего в пакетных файлах

C:\Windows\system32\cmd.exe /c for %I in (..\..\bin\*) do @for %J in ("%~nI.exe: $(srcdir)/bin/%~nI" " $(ECHO) generating $(@)" " $(Q) copy /y /b $(STUBPROGRAM) $(@) > nul" " $(Q) echo.>>$(@)" " $(Q) echo.>>$(@)" " $(Q) copy /b $(@)+$(srcdir:/=\)\bin\%~nI $(@) > nul" "") do @echo.%~J>>scriptbin.mk 

который CMD barfed на:

The following usage of the path operator in batch-parameter 
substitution is invalid: %~nI.exe: $(srcdir)/bin/%~nI" "  $(ECHO) generating $(@)" "  $(Q) copy /y /b $(STUBPROGRAM) $(@) > nul" " $(Q) echo.>>$(@)" "  $(Q) echo.>>$(@)" "  $(Q) copy /b $(@)+$(srcdir:/=\)\bin\%~nI $(@) > nul" "") do @echo.%~J>>scriptbin.mk 

который я полагаю, не должно быть очень удивительно, как акт команд чтения из командного файла выполняет различные подстановки, интерпретации специальных символов и так далее.

Я мог бы попытаться изменить материал в пакетном файле, ускользнув от вещей, но для этого потребуется программа, которая выполняет экранирование, чтобы знать все, что нужно знать о том, как cmd разбирает вещи и что нужно избегать; Я мог видеть, что я все еще пытаюсь исправить ошибки в этом году в следующем году.

Я мог бы написать свою собственную программу для запуска командного файла без каких-либо подстановок или интерпретаций, но это было бы не так хорошо, как наличие пакетных файлов, которые можно запустить как есть.

Есть ли способ сказать что-то вроде «сбежать от всего» или «отключить подстановки для остальной части этого файла» или что-нибудь в этом роде?

ответ

0

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

cmd <foo.bat 
Смежные вопросы