Diferença entre% variable% e! Variable! no arquivo em lotes

Eu estou escrevendo um arquivo em lotes onde eu preciso produzir uma string contendo '!' para outro arquivo. Mas quando eu faço o eco dessa string para outro arquivo, ele remove "!" da saída.

Por exemplo: entrada:

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

Saída em new_file.txt é:

Hi this is output

Além disso, se a entrada for

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

Saída em new_file.txt:

Hello

Por isso, pula o! (Ponto de exclamação) da saída para o novo_arquivo. Se eu usar% LINE%, ele simplesmente exibe "echo is on" no arquivo de saída.

Por favor, sugira uma maneira de superar esse problema.

questionAnswers(2)

yourAnswerToTheQuestion