Windows .batch Choice 命令无论输入如何总是选择相同的选项

Windows .batch Choice command always chooses the same choice no matter input

我正在做一个项目来帮助自己更好地学习批处理。我的代码应该是 "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,无论我为 [=13 输入什么=].

我已经更改了 choice 开关并将其移动到一行中,但它仍然无法正常工作。它嵌套的 if 是为了检查计算机上是否存在文件,因此这是一项要求,但也可能是问题所在?

我试着在这个网站上四处寻找,但对我的问题没有任何帮助,我们很乐意接受任何帮助!!

检查反向顺序中的errorlevel

if errorlevel n

表示如果 errorlevel 是 n 或更大

因此,对于 if errorlevel 1

errorlevel 2 将被解释为 true

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

:install_check
ClS
If Not Exist "UI" GoTo install_yes
Choice /M "UI is already installed; reinstall"
If Errorlevel 2 GoTo return
GoTo del

如果代码中的下一个 line/label 是 :del,您也可以删除第六行。

如果名称 UI 属于一个目录而不是一个文件然后你将第三行更改为 If Not Exist "UI\" GoTo install_yes.

ERRORLEVEL 不会像 IF 语句一样在控制块内部更新,除非您使用 !ERRORLEVEL!而不是 %ERRORLEVEL% 并在代码的开头使用此命令:setlocal ENABLEDELAYEDEXPANSION

http://batcheero.blogspot.ca/2007/06/how-to-enabledelayedexpansion.html