批处理脚本中ECHO命令内部的Escape@Sign(在VS后期生成事件中调用)



我只想在文本中显示@符号,该文本由Visual Studio后生成事件调用的CMD批处理脚本中的ECHO命令输出。我该怎么做?

我的一行构建后事件调用我的批处理脚本,如下所示:

if $(ConfigurationName) == Release call "$(ProjectDir)..MYBATCHSCRIPT.bat"

MYBATCHSCRIPT.bat文件简单地说明:

@ECHO OFF
ECHO Please create a separate batch file called C:TempOTHERBATCH.bat and place this code inside it:
ECHO @ECHO OFF
ECHO ECHO Hi there!
call C:TempOTHERBATCH.bat

我知道有一些转义符(如^(可以用来作为特殊字符的前缀,但到目前为止,似乎没有一个对我有效!帮助这是我在脚本中冒犯的一行:

ECHO @ECHO OFF

该线路的预期输出为:

@ECHO关闭

我所做的只是向开发人员提供一个提示,让他们编写一个单独的、先决条件的、非版本控制的两行OTHERBATCH.bat批处理文件。他必须把它写出来,我的构建才能正常工作。我在构建输出显示中给他一个实际的代码示例。

如果我在常规命令行上运行,我的代码确实会输出预期的结果!它只是失败了,";命令的语法不正确";当我在生成后事件中调用批处理脚本时!我只想写"@ECHO OFF";在屏幕上显示我的后期构建输出!

为了实现我想要的结果(将"@ECHO OFF"输出到Visual Studio输出窗口(,由于MSBuild处理批处理脚本*.bat文件的方式存在意外限制,我不得不改变主意。

从那以后,我了解到,在VisualStudio后期构建事件中使用的命令解释器不能像我可以从Windows启动的CMD提示符后面的命令解释器那样功能齐全——尽管两者都运行*.bat文件。到目前为止,在我有限的观察中,它的表现将有所不同,如下所示:

  • 使用撇号而不是REM会引发错误
  • 任何这样的行都会抛出一个错误:
    • ECHO ECHO OFF
    • @ECHO@ECHO关闭
  • PAUSE命令不会等待用户按键

我对上述问题的解决方案是创建一个单独的文本文件,其中包含我想在输出窗口上显示的信息,然后使用TYPE命令在我的批处理脚本中显示它,如下所示:

TYPE INFO.TXT

内部信息。TXT我可以放置我想要显示的任何文本,包括@符号和类似"@ECHO OFF";,没有问题。

最新更新