【问题标题】:Choice Statement goes inside wrong IF statements选择语句进入错误的 IF 语句
【发布时间】:2020-06-13 07:31:28
【问题描述】:

我有这个代码:

@echo off 
setlocal enabledelayedexpansion

set ZOOM_LEVEL=100
choice /c XSM /m "Please input selected font size: "
echo errorlevel: %errorlevel%
if %errorlevel% == 1 (
    echo Font size selected: Extra Small
    set ZOOM_LEVEL=-1.5
    echo zoom1 !ZOOM_LEVEL!
) 
if %errorlevel% == 2 (
    echo Font size selected: Small
    set ZOOM_LEVEL=-1
    echo zoom2 !ZOOM_LEVEL!
)
if %errorlevel% == 3 (
    echo Font size selected: Medium
    set ZOOM_LEVEL=0
    echo zoom3 !ZOOM_LEVEL!
)
echo zoom level !ZOOM_LEVEL!
echo Font size saved

pause

所以我期待如果:

  • X 被选中,ZOOM_LEVEL = -1.5
  • S 被选中,ZOOM_LEVEL = -1
  • M被选中,ZOOM_LEVEL = 0

但是,当我运行这个 bat 文件时,我得到了 ff:

  • x 已选中:
Please input selected font size: [X,S,M]?X
errorlevel: 1
Font size selected: Extra Small
zoom1 -1.5
zoom3 0
zoom level 0
Font size saved
  • s 已选中:
Please input selected font size: [X,S,M]?S
errorlevel: 2
Font size selected: Small
zoom2 -1
zoom3 0
zoom level 0
Font size saved
  • m 已选中:
Please input selected font size: [X,S,M]?M
errorlevel: 3
Font size selected: Medium
zoom3 0
zoom level 0
Font size saved

无论选择什么,它似乎总是会进入 errorlevel3,因为它打印 zoom3 0 但从不打印 Font size selected 部分。

发生了什么?? 请帮忙。谢谢

【问题讨论】:

    标签: batch-file cmd command-line


    【解决方案1】:

    我现在可以使用不同的解决方案使其工作:

    @echo off 
    setlocal enabledelayedexpansion
    
    set ZOOM_LEVEL=100
    choice /c XSM /m "Please input selected font size: "
    echo errorlevel: %errorlevel%
    set SELECTED=%errorlevel%
    if %SELECTED% == 1 set ZOOM_LEVEL=-1.5
    if %SELECTED% == 2 set ZOOM_LEVEL=-1
    if %SELECTED% == 3 set ZOOM_LEVEL=0
    
    echo zoomlevel %ZOOM_LEVEL%
    pause
    

    (但我仍然不明白为什么我上面的问题中的代码不起作用)。

    谢谢大家。

    【讨论】:

    • 正如我所说,您的原始代码对我来说运行良好。我可以想象它对您不起作用的两个原因:代码在代码块中,需要!errorlevel!(您已经说过不是这种情况)或者您定义了一个变量errorlevel,它覆盖了系统变量.
    • 老实说,我觉得它不适用于我的情况很奇怪。我一遍又一遍地阅读我的代码,我想它应该像你一样工作。我想这与这里提到的有关:robvanderwoude.com/choice.php about Windows NT(但我在 Windows 10 上).. 他的例子也不适用于我的机器。只有他的 Windows NT 笔记中的那个在我的机器上运行良好
    • 我也是WIN10,所以不是这个原因。如果您在重新启动后得到正确的结果,那么您只是搞砸了一些事情(即使是我们中最好的人也会发生)。如果它仍然是错误的,你应该担心。您的原始代码应该在每个 Windows 上都能正常运行。
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多