2

Я работаю над сценарием, где у меня есть следующий код:

:top  
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
echo %msg% >> File.txt
goto top
:cancel

Я ищу способ для набора /p принять &^*<>?| и все такое, и все еще отражать его в файле. Это возможно? На данный момент скрипт просто разбивает

1 ответ1

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .