%variable%和!变量之间的差异!在批处理文件中

Vis*_*hal 27 windows command-line batch-file

我正在编写一个批处理文件,我需要输出一个包含'!'的字符串 到另一个文件.但当我将该字符串回显给另一个文件时,它会删除"!" 从输出.

例如:输入:

set LINE=Hi this is! output
echo !LINE!>>new_file.txt
Run Code Online (Sandbox Code Playgroud)

new_file.txt中的输出是:

Hi this is output
Run Code Online (Sandbox Code Playgroud)

此外,如果输入是

set LINE=Hello!! this is output!!
echo !LINE!>>new_file.txt
Run Code Online (Sandbox Code Playgroud)

new_file.txt中的输出:

Hello
Run Code Online (Sandbox Code Playgroud)

因此,它跳过了!(感叹号)从输出到new_file.如果我使用%LINE%,那么它只是在输出文件中显示"echo is on".

请建议一种方法来克服这个问题.

jeb*_*jeb 18

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

逃避感叹号不需要,一个或两个插入符号,具体取决于放置位置.

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

echo !test1!
echo !test2!
echo !test3!
Run Code Online (Sandbox Code Playgroud)

DOS批处理中解释了块!var!%var%块之间的区别:为什么我的set命令导致什么都没有存储?

可以在Windows命令解释器(CMD.EXE)如何解析脚本中找到批处理解析器的说明


izo*_*ica 6

看起来你已经SETLOCAL EnableDelayedExpansion在代码中的某个地方调用过了.看看这里有什么影响.