%variables%和!variables之间的区别! 在batch file中

我正在写一个batch file,我需要输出一个string包含'!' 到另一个文件。 但是,当我将该string回显给另一个文件时,它将删除“!” 从输出。

例如:input:

set LINE=Hi this is! output echo !LINE!>>new_file.txt 

new_file.txt中的输出是:

 Hi this is output 

另外,如果input是

 set LINE=Hello!! this is output!! echo !LINE!>>new_file.txt 

在new_file.txt中输出:

 Hello 

因此,它跳过! (感叹号)从输出到new_file。 如果使用%LINE%,则只显示输出文件的“echo is on”。

请build议一种方法来解决这个问题。

如果您启用了延迟扩展并希望输出感叹号,则需要将其转义。

转义感叹号不需要一个或两个插入符号,具体取决于放置位置。

 @echo off set test1=Test1! setlocal EnableDelayedExpansion set test2=Test2^^! set "test3=Test3^!" echo !test1! echo !test2! echo !test3! 

!var!的区别 %var%的块在DOS批处理解释:为什么我的设置命令导致没有得到存储?

批解析器的解释可以在Windows命令解释器(CMD.EXE)如何解析脚本找到?

看起来你已经在代码中更高的地方调用了SETLOCAL EnableDelayedExpansion 看看这里看看是什么影响。