无论输入什么,Windows .batch Choice命令总是选择相同的选项

r7knjye2  于 2023-01-06  发布在  Windows
关注(0)|答案(3)|浏览(164)

我正在做一个项目来帮助自己更好地学习批处理。我有一些代码,它是一个“UI”的排序。
我有一个问题的片段是这样的:

:install_check
if exist UI (
echo UI is already installed; reinstall?
CHOICE
if Errorlevel 1 goto :del
if Errorlevel 2 goto :return
cls && goto :install_check
)
goto :install_yes

我知道命名约定和一些编码的东西是不完美的,但我真的看不出为什么每次运行它去:del,无论我在choice键入什么。
我已经更改了choice开关,并将其移动到一行中,但它仍然不想工作。它嵌套在if中是为了检查计算机上是否存在文件,因此这是一个要求,但也可能是问题所在?
我试着在这个网站上四处寻找,但没有什么会帮助我的问题,任何帮助都很乐意接受!!

yacmzcpb

yacmzcpb1#

按 * 反向 * 顺序检查errorlevel

if errorlevel n

表示如果errorlevel为n或更大
因此,对于if errorlevel 1errorlevel2将被解释为true

p4tfgftt

p4tfgftt2#

由于已经确定了解决方案,下面的示例 (使用现有标签名称) 将稍微调整代码的结构:

:install_check
ClS
If Not Exist "UI" GoTo install_yes
Choice /M "UI is already installed; reinstall"
If Errorlevel 2 GoTo return
GoTo del
  • 如果代码中的下一行/标签是:del,则还可以删除第六行。

如果名称UI属于一个目录而不是文件,那么您可以将第三行更改为If Not Exist "UI\" GoTo install_yes。*

cnwbcb6i

cnwbcb6i3#

除非使用! ERRORLEVEL!而不是%ERRORLEVEL %,并在代码开头使用以下命令,否则ERRORLEVEL不会在控制块(如IF语句)内更新:设置本地启用延迟扩展
参见http://batcheero.blogspot.ca/2007/06/how-to-enabledelayedexpansion.html

相关问题