Метод 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