I am writing a batch file where I need to output a string containing '!' to another file. But when I echo that string to another file, it removes "!" from the output.
Eg: Input:
set LINE=Hi this is! output
echo !LINE!>>new_file.txt
Output in new_file.txt is:
Hi this is output
Also, if input is
set LINE=Hello!! this is output!!
echo !LINE!>>new_file.txt
Output in new_file.txt:
Hello
Hence, it skips the ! (Exclamation mark) from the output to the new_file. If I use %LINE%, then it simply displays "echo is on" to the output file.
Please suggest a way to overcome this problem.
It seems you have called
SETLOCAL EnableDelayedExpansion
somewhere higher in the code. Take a look here to see what the effects from that are.If you have delayed expansion enabled and want to output an exclamation mark, you need to escape it.
Escaping of exclamation marks needs none, one or two carets, depending on the placement.
The difference between
!var!
and%var%
in blocks is explained at DOS batch: Why are my set commands resulting in nothing getting stored?An explanation of the batch parser can be found at How does the Windows Command Interpreter (CMD.EXE) parse scripts?