【问题标题】:Why is this Choice command not working (batch-file)为什么此选择命令不起作用(批处理文件)
【发布时间】:2017-08-22 21:49:27
【问题描述】:

我有这个

@echo off
:1
cls
echo Navigation: W-Up, S-Down, E-Enter
echo _________________________________
echo -(Option 1)
echo   Option 2
echo   Option 3
choice /c WSE /n
if ERRORLEVEL 1 goto 3
if ERRORLEVEL 2 goto 2
if ERRORLEVEL 3 goto opt1
:2
cls
echo Navigation: W-Up, S-Down, E-Enter
echo _________________________________
echo   Option 1
echo -(Option 2)
echo   Option 3
choice /c WSE /n
if ERRORLEVEL 1 goto 1
if ERRORLEVEL 2 goto 2
if ERRORLEVEL 3 goto opt2
:3
cls
echo Navigation: W-Up, S-Down, E-Enter
echo _________________________________
echo   Option 1
echo   Option 2
echo -(Option 3)
choice /c WSE /n
if ERRORLEVEL 1 goto 2
if ERRORLEVEL 2 goto 1
if ERRORLEVEL 3 goto opt3
:opt1
cls
echo You chose Option 1
pause >nul
exit
:opt2
cls
echo You chose Option 2
pause >nul
exit
:opt3
cls
echo You chose Option 3
pause >nul
exit

它应该做的是看起来像一个选择菜单,但由于某种原因,它只是不断地从第 2 行到第 9 行循环通过 ":1",它只是一遍又一遍地循环,为什么要这样做?我怎样才能让它不这样做?

【问题讨论】:

  • 你必须反转你的 if 错误级别,从最高的数字开始。事实上,if ERRORLEVEL 1 goto 1 被解释为if ERRORLEVEL is 1 or greater goto 1,所以根本没有达到其他 IF。另一种方法是将 if %errorlevel%==1 ... 与 EnableExtensions (默认)进行比较
  • 阅读 help if / If /?ss64.com/nt/if.html 有帮助

标签: batch-file choice


【解决方案1】:

阅读choice /?


根据该帮助页面,错误级别应该以相反的顺序进行检查。

choice /c WSE /n
if ERRORLEVEL 3 goto opt3
if ERRORLEVEL 2 goto 2
if ERRORLEVEL 1 goto 1

为什么?因为if ERRORLEVEL 1 表示if %errorlevel% <b>geq</b> 1。或者,您可以这样做:

if %errorlevel% equ 1 goto 1
if %errorlevel% equ 2 goto 2
if %errorlevel% equ 3 goto opt3

findstr 甚至更疯狂(但更安全)。

set errlvl=%errorlevel:~-1%
echo "%errlvl%"| findstr /l /x /i """1""" && goto :1
echo "%errlvl%"| findstr /l /x /i """2""" && goto :2
echo "%errlvl%"| findstr /l /x /i """3""" && goto :opt3

我们并不真正需要 set 声明,而是一种预防措施


另外提醒一下,如果用户按下“WSE”之外的键,则会发出令人讨厌的响亮哔哔声。您可能想查看my poorly title question 以了解使它们静音的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多