我有一个我想要运行的命令列表(由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 :(得分:0)
如果使用以下命令运行批处理文件,似乎可以解决此问题:
cmd <foo.bat