方法一:延迟扩展

方法一:延迟扩展

我正在编写一个脚本,其中有以下代码:

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

我正在寻找一种方法,让 set /p 接受&^*<>?|所有这些内容,并将其回显到文件中。这可能吗?目前脚本只是崩溃了

答案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

相关内容