У меня есть список команд (сгенерированных 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 разбирает вещи и что нужно избегать; Я мог видеть, что я все еще пытаюсь исправить ошибки в этом году в следующем году.
Я мог бы написать свою собственную программу для запуска командного файла без каких-либо подстановок или интерпретаций, но это было бы не так хорошо, как наличие пакетных файлов, которые можно запустить как есть.
Есть ли способ сказать что-то вроде «сбежать от всего» или «отключить подстановки для остальной части этого файла» или что-нибудь в этом роде?