意外输入时的批处理文件选择循环
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
但这对任何输入都有选择,甚至 1
或 2
。
如果用户不能按除 1 或 2(或 Ctrl+C 中断批处理文件执行)以外的任何其他键,并在按下键后立即继续脚本处理,请使用此代码 1 或 2.
@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 上的示例 - 只需使用顶行的搜索框
所以我有这个选择:
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
但这对任何输入都有选择,甚至 1
或 2
。
如果用户不能按除 1 或 2(或 Ctrl+C 中断批处理文件执行)以外的任何其他键,并在按下键后立即继续脚本处理,请使用此代码 1 或 2.
@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 上的示例 - 只需使用顶行的搜索框