我最近发现了一种使用 set 命令提供的 /p 选项在 windows cmd.exe 批处理文件中获取用户输入的简单方法。但是出于一个奇怪的原因,我不明白 set /p 在 if 语句之间使用时表现得很棘手。
首先,创建一个名为“ScriptRunsOK.bat”的批处理文件,代码如下:
@echo off
rem Gets a User Yes-No Choice
set /p UserInput=Your Choice [Y/N]:
set UserChoice=%UserInput:~0,1%
if "%UserChoice%"=="y" set UserChoice=Y
if "%UserChoice%"=="Y" (
echo You Accepted[%UserChoice%] typing %UserChoice%
) else (
echo You Rejected[%UserChoice%] typing %UserChoice%
)
pause
其次,在 if 语句之间创建一个批处理文件“ScriptRunsBAD.bat”,其中包含“用户输入和评估”代码(仅用于示例目的)。代码如下:
@echo off
rem Gets a User Yes-No Choice. Choice Nested in a IF Statement
set DummyVar=OK
if "%DummyVar%"=="OK" (
set /p UserInput=Your Chiuce [Y/N]:
set UserChoice=%UserInput:~0,1%
if "%UserChoice%"=="y" set UserChoice=Y
if "%UserChoice%"=="Y" (
echo You Accepted[%UserChoice%] typing %UserChoice%
) else (
echo You Rejected[%UserChoice%] typing %UserChoice%
)
)
pause
第三,双击运行“ScriptRunsOK.bat”,或者直接从de命令行反复运行。每次运行它都可以正常工作。但是,如果您尝试使用“ScriptRunsBAD.bat”进行相同操作,它不会像我预期的那样工作,而且,当您从命令行运行它时,奇怪的是,它会保留在先前执行中键入的用户输入。
导致该行为的“ScriptRunsBAD.bat”的代码是什么?在 if 或多行语句中使用 set /p 命令时,我是否必须考虑其他事项?