这是一个愚蠢的问题,但请帮助或我的大脑会爆炸! ;))我不理解的一些愚蠢的事情......
简而言之:为什么在我选择数字7(退出)之后返回的ERRORLEVEL是正确的但是忽略了GOTO指定的标签,而是转到allTasksReboot标签......
这是我的“代码”...
@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
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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