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

时间:2013-01-16 08:58:48

标签: windows command-line batch-file

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

例如:  输入:

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

new_file.txt中的输出是:

Hi this is output

另外,如果输入是

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

new_file.txt中的输出:

Hello

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

请提出一种解决此问题的方法。

2 个答案:

答案 0 :(得分:18)

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

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

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

echo !test1!
echo !test2!
echo !test3!

DOS batch: Why are my set commands resulting in nothing getting stored?

解释了块中!var!%var%之间的差异

可以在How does the Windows Command Interpreter (CMD.EXE) parse scripts?

找到批处理解析器的说明

答案 1 :(得分:6)

您似乎已在代码中的某个位置调用了SETLOCAL EnableDelayedExpansion。看看here,看看它的影响是什么。