Метод 1: отложенное расширение
Один из способов сделать то, что вы хотите, это использовать отложенное расширение, которое оставляет специальные символы в покое.
Задержка расширения приведет к тому, что переменные в пакетном файле будут расширяться во время выполнения, а не во время анализа, эта опция включается командой SETLOCAL EnableDelayedExpansion.
:top
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
setlocal EnableDelayedExpansion
echo !msg! >> File.txt
endlocal
goto top
:cancel
Как видите, вам нужно будет использовать !msg!
вместо %msg%
.
Способ 2: цитаты
Помещение кавычек вокруг переменной также оставляет специальные символы в покое, и побочный эффект от того, что эти кавычки также попадают в ваш вывод.
:top
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
echo "%msg%" >> File.txt
goto top
:cancel