我正在做一个项目来帮助自己更好地学习批处理。我的代码意味着各种各样的“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
用于检查计算机上是否存在文件,因此这是一个要求,但也可能是问题?
我试着在这个网站上四处看看,但没有什么能帮到我的问题,很乐意接受任何帮助!!
答案 0 :(得分:3)
检查反向顺序中的errorlevel
。
if errorlevel n
表示errorlevel
n 或更高
因此,errorlevel
2将被解释为true
的{{1}}
答案 1 :(得分:0)
由于已经确定了解决方案,以下示例(使用您现有的标签名称),重新构建您的代码:
: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
。
答案 2 :(得分:0)
除非使用!ERRORLEVEL !,否则ERRORLEVEL不会在IF语句之类的控制块内更新。而不是%ERRORLEVEL%,并在代码开头使用以下命令:setlocal ENABLEDELAYEDEXPANSION
请参阅http://batcheero.blogspot.ca/2007/06/how-to-enabledelayedexpansion.html