Método 1: Expansão atrasada
Uma maneira de fazer o que você quer é usar a Expansão com Atraso , que deixa os caracteres especiais sozinhos.
Delayed Expansion will cause variables within a batch file to be expanded at execution time rather than at parse time, this option is turned on with the SETLOCAL EnableDelayedExpansion command.
:top
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
setlocal EnableDelayedExpansion
echo !msg! >> File.txt
endlocal
goto top
:cancel
Como você pode ver, você precisará usar !msg!
em vez de %msg%
.
Método 2: Citações
Colocar aspas ao redor da variável também deixa os caracteres especiais sozinhos, com o efeito colateral de fazer com que essas citações passem para sua saída também.
:top
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
echo "%msg%" >> File.txt
goto top
:cancel