意外输入时的批处理文件选择循环

Batch file choice loop on unexpected input

所以我有这个选择:

echo.
echo  All done. What would you like to do next?
echo  1. Open output folder
echo  2. Exit
echo.

set /p Choose=" Select 1 or 2 and press Enter: "

if '%Choose%'==1 goto show
if '%Choose%'==2 goto end

问题是,此脚本将 2 以外的任何其他选择检测为 1,这不是我想要的。相反,我希望它在意外输入时循环回到 choice。互联网告诉我的最接近的事情是:

if '%Choose%'NEQ 1 if '%Choose%'NEQ 2 goto choice

但这对任何输入都有选择,甚至 12

如果用户不能按除 1 或 2(或 Ctrl+C 中断批处理文件执行)以外的任何其他键,并在按下键后立即继续脚本处理,请使用此代码 12.

@echo off
echo/
echo  All done. What would you like to do next?
echo/
echo  1. Open output folder
echo  2. Exit
echo/
%SystemRoot%\System32\choice.exe /C 12 /N /M "Select 1 or 2: "
if errorlevel 2 goto :EOF

rem Code to run on open output folder.
echo Use selected 1.

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • choice /?
  • echo /?
  • if /?
  • goto /?
  • rem /?

另请阅读 Microsoft 支持文章 Testing for a Specific Error Level in Batch Files 为什么这里仅使用 if errorlevel 2 goto :EOF 就足够了,因为唯一剩下的选项是 errorlevel 在执行 [=18] 后的值为 1 =].

并阅读 DosTips 论坛主题 ECHO. FAILS to give text or blank line - Instead use ECHO/ 为什么最好使用 echo/ 而不是 echo. 来输出空行。

另请阅读:

if 的两边必须相同才能使 == 为真。您已经对第一个进行了单引号,因此您必须对第二个进行单引号。实际上,为了安全起见,双引号 " 双方。如果两个 if 语句都失败,那么所做的选择都不是,所以转到你的第一个回声。说到选择 - 你应该将其视为完成工作的另一种方式。很多SO 上的示例 - 只需使用顶行的搜索框