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 に答える
1

おそらく名前付きの単一の GOTO を使用するのLABEL-<n>が一番好きですが、@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 に答える