2

这是一个愚蠢的问题,但请帮忙,否则我的大脑会爆炸!;)) 一些我不明白的愚蠢的事情......

简而言之:为什么在我选择数字 7(退出)后,返回的 ERRORLEVEL 是正确的,但 GOTO 指定的标签被忽略,而是转到 allTask​​sReboot 标签...

这是我的“代码”...

@echo off
mode con: cols=150 lines=65
@echo ------------------------------------------------------------------------------------------------
@echo INSTALLATION MENU
@echo ------------------------------------------------------------------------------------------------
@echo [ 1 ].All tasks - Unattended with reboot on finish
@echo [ 2 ].All tasks - Unattended without reboot on finish
@echo [ 3 ].All tasks except Software group - Unattended with reboot on finish
@echo [ 4 ].All tasks except Software group - Unattended without reboot on finish
@echo [ 5 ].All tasks except Java 7 installation - Unattended without reboot on finish
@echo [ 6 ].Install only VNC - Unattended
@echo [ 7 ].Exit
@echo ------------------------------------------------------------------------------------------------
@echo ------------------------------------------------------------------------------------------------
CHOICE /C:1234567 /N /M "Choose number for installation type."
@echo You press: %ERRORLEVEL%
@pause
IF ERRORLEVEL 1 GOTO allTasksReboot
IF ERRORLEVEL 2 GOTO allTasks
IF ERRORLEVEL 3 GOTO allExceptSoftwareReboot
IF ERRORLEVEL 4 GOTO allExceptSoftware
IF ERRORLEVEL 5 GOTO allTasksExceptJava
IF ERRORLEVEL 6 GOTO onlyVnc
IF ERRORLEVEL 7 GOTO scriptend

:allTasksReboot
@echo **************************************************************************
@echo All tasks - Unattended with reboot on finish
@echo **************************************************************************
@pause
goto scriptend

:scriptend
@echo Lets exit...
@pause

:goexit
4

3 回答 3

4

试试这个:

IF ERRORLEVEL 7 GOTO scriptend
IF ERRORLEVEL 6 GOTO onlyVnc
IF ERRORLEVEL 5 GOTO allTasksExceptJava
IF ERRORLEVEL 4 GOTO allExceptSoftware
IF ERRORLEVEL 3 GOTO allExceptSoftwareReboot
IF ERRORLEVEL 2 GOTO allTasks
IF ERRORLEVEL 1 GOTO allTasksReboot
于 2013-06-27T15:18:25.683 回答
4

请记住,IF ERRORLEVEL N command测试当前的 ERRORLEVEL 值是否大于或等于给定数字,因此必须始终按错误级别降序执行此命令。你可以这样改变你的IF命令:

IF %ERRORLEVEL% EQU 1 GOTO allTasksReboot
IF %ERRORLEVEL% EQU 2 GOTO allTasks
.....

或者,如果您将标签更改为严格格式的标签并使用直接 GOTO 命令,则可以大大简化代码:

CHOICE /C:1234567 /N /M "Choose number for installation type."
@echo You press: %ERRORLEVEL%
@pause
GOTO LABEL-%ERRORLEVEL%

:LABEL-1  allTasksReboot
@echo **************************************************************************
@echo All tasks - Unattended with reboot on finish
@echo **************************************************************************
@pause
goto scriptend

:LABEL-7  scriptend
@echo Lets exit...
@pause

:goexit
于 2013-06-27T15:31:55.590 回答
1

我可能最喜欢使用带有LABEL-<n>名称的单个 GOTO,但@Endoro 的解决方案是使用IF ERRORLEVEL. 如果您不想订购 IF 检查,您还可以使用以下值%ERRORLEVEL%

IF %ERRORLEVEL% EQU 7 GOTO scriptend
IF %ERRORLEVEL% EQU 5 GOTO allTasksExceptJava
IF %ERRORLEVEL% EQU 2 GOTO allTasks
IF %ERRORLEVEL% EQU 6 GOTO onlyVnc
IF %ERRORLEVEL% EQU 1 GOTO allTasksReboot
IF %ERRORLEVEL% EQU 3 GOTO allExceptSoftwareReboot
IF %ERRORLEVEL% EQU 4 GOTO allExceptSoftware
于 2013-06-27T17:21:37.787 回答