Batch: Как отобразить набор / p со специальными символами в файл?

889
Mark Deven

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

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

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

2

1 ответ на вопрос

1
Worthwelle

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