我正在做一个项目来帮助自己更好地学习批处理。我有一些代码,它是一个“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
中是为了检查计算机上是否存在文件,因此这是一个要求,但也可能是问题所在?
我试着在这个网站上四处寻找,但没有什么会帮助我的问题,任何帮助都很乐意接受!!
3条答案
按热度按时间yacmzcpb1#
按 * 反向 * 顺序检查
errorlevel
。表示如果
errorlevel
为n或更大因此,对于
if errorlevel 1
,errorlevel
2将被解释为true
p4tfgftt2#
由于已经确定了解决方案,下面的示例 (使用现有标签名称) 将稍微调整代码的结构:
:del
,则还可以删除第六行。如果名称
UI
属于一个目录而不是文件,那么您可以将第三行更改为If Not Exist "UI\" GoTo install_yes
。*cnwbcb6i3#
除非使用! ERRORLEVEL!而不是%ERRORLEVEL %,并在代码开头使用以下命令,否则ERRORLEVEL不会在控制块(如IF语句)内更新:设置本地启用延迟扩展
参见http://batcheero.blogspot.ca/2007/06/how-to-enabledelayedexpansion.html