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

时间:2017-08-17 15:10:04

标签: batch-file choice

所以我有这个选择:

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

2 个答案:

答案 0 :(得分:1)

使用此代码,任何用户都无法按下除1或2之外的任何内容(或Ctrl + C以中断批处理文件执行),并在按下 1 或<之后立即继续执行脚本处理KBD> 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.

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

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

另请阅读Microsoft支持文章Testing for a Specific Error Level in Batch Files,为什么它只能使用if errorlevel 2 goto :EOF,因为唯一剩下的选项是errorlevel在执行choice后的值为1

另请阅读DosTips论坛主题ECHO. FAILS to give text or blank line - Instead use ECHO/为什么最好使用echo/代替echo.输出空行。

另请阅读:

答案 1 :(得分:1)

一个if的两边必须相同才能使==变为真。你已经单引第一个,所以你必须单引第二个。实际上,双引号&#34;双方都是为了安全。如果两个if语句都失败了,那么所做的选择都不是,所以转到你的第一个回声。说到选择 - 您应该将其视为完成工作的另一种方式。关于SO的大量例子 - 只需使用顶行的搜索框