Я запускаю пакетный файл, который проверяет наличие Java\jre6, затем выполняется один тип команды, затем, наконец, оператор else, но я обнаруживаю, что все stmts выполняются вместе.
echo.
echo.
GOTO:Java
:Java
IF EXIST C:\Program Files\Java\jre6(
echo. Java Version 1.6 present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java 6 thereeee"
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
XCOPY "%CD%\Sec\*.*" "%ProgramFiles%\Java\jre6\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles%\Java\jre6\lib\ext\" /s /Y
)
else(
XCOPY "%CD%\Sec\*.*" "%ProgramFiles(x86)%\Java\jre6\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles(x86)%\Java\jre6\lib\ext\" /s /Y
)
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Your Settings have been installed successfully for 6"
)
IF EXIST C:\Program Files\Java\jre7(
echo. Java Version 1.7 present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java 7 thereeee"
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
XCOPY "%CD%\Jar\*.*" "%ProgramFiles%\Java\jre7\lib\ext\" /s /Y
XCOPY "%CD%\Sec7\*.*" "%ProgramFiles%\Java\jre7\lib\security\" /s /Y
)
else
(
XCOPY "%CD%\Jar\*.*" "%ProgramFiles(x86)%\Java\jre7\lib\ext\" /s /Y
XCOPY "%CD%\Sec7\*.*" "%ProgramFiles(x86)%\Java\jre7\lib\security\" /s /Y
)
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Your Settings have been installed successfully for 7"
)
IF EXIST C:\Program Files\Java\jre8(
echo. Java Version 1.8 present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java 8 thereeee"
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
XCOPY "%CD%\Sec\*.*" "%ProgramFiles%\Java\jre8\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles%\Java\jre8\lib\ext\" /s /Y
)
else(
XCOPY "%CD%\Sec\*.*" "%ProgramFiles(x86)%\Java\jre8\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles(x86)%\Java\jre8\lib\ext\" /s /Y
)
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Your Settings have been installed successfully for 8"
)
ELSE (
echo. Java NOT present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java is not Installed In your system , install Java 1.8 and try to execute settings again"
GOTO:EXIT
)
:EXIT
решение1
Критические проблемы, которые необходимо устранить:
- Имя файла IF EXIST необходимо заключить в кавычки, если оно содержит пробелы (или вредоносные символы, такие как
&
). (
Перед началом блока кода должен быть пробел.)
,ELSE
, и(
должны располагаться на одной строке- Ваша логика неверна - он всегда будет выполнять код "Java NOT present", если только не существует версии 1.8. Вы должны либо сделать всю конструкцию одной большой цепочкой IF ... ELSE IF ..., либо GOTO :SomeLabel в конце каждого блока IF
Дополнительные предложения:
ECHO.
ненадежен. Существуют необычные обстоятельства, при которых он может дать сбой. Лучше привыкнуть использоватьECHO(
, так как он всегда работает. Я знаю, что это выглядит «неправильно», как будто это запутывает блоки кода, но на самом деле это очень надежно.ECHO(
требуется только тогда, когда у вас нет ничего, кроме пробела (или возможности только пробела), который подвергается ECHO. Но это, безусловно, не повредит всегда использовать эту форму.- На одной машине можно установить несколько версий JRE. Вы можете рассмотреть возможность изменения порядка так, чтобы всегда подготавливалась самая последняя найденная версия.
- Если у вас нет дополнительного кода, не показанного в верхней части, GOTO :JAVA не нужен.
- Если у вас нет дополнительного кода после :EXIT, то лучше использовать
GOTO :EOF
илиEXIT /B
, чтобы просто выйти из скрипта, без необходимости в метке внизу. - Отступы — ваши друзья. Они помогают увидеть логику вашего кода — делают его гораздо более понятным.
echo(
echo(
GOTO:Java
REM Presumably the GOTO above is conditional, and there is more code that goes here
:Java
IF EXIST "C:\Program Files\Java\jre6" (
echo( Java Version 1.6 present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java 6 thereeee"
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
XCOPY "%CD%\Sec\*.*" "%ProgramFiles%\Java\jre6\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles%\Java\jre6\lib\ext\" /s /Y
) else (
XCOPY "%CD%\Sec\*.*" "%ProgramFiles(x86)%\Java\jre6\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles(x86)%\Java\jre6\lib\ext\" /s /Y
)
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Your Settings have been installed successfully for 6"
) else IF EXIST "C:\Program Files\Java\jre7" (
echo( Java Version 1.7 present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java 7 thereeee"
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
XCOPY "%CD%\Jar\*.*" "%ProgramFiles%\Java\jre7\lib\ext\" /s /Y
XCOPY "%CD%\Sec7\*.*" "%ProgramFiles%\Java\jre7\lib\security\" /s /Y
) else (
XCOPY "%CD%\Jar\*.*" "%ProgramFiles(x86)%\Java\jre7\lib\ext\" /s /Y
XCOPY "%CD%\Sec7\*.*" "%ProgramFiles(x86)%\Java\jre7\lib\security\" /s /Y
)
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Your Settings have been installed successfully for 7"
) else IF EXIST "C:\Program Files\Java\jre8" (
echo( Java Version 1.8 present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java 8 thereeee"
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
XCOPY "%CD%\Sec\*.*" "%ProgramFiles%\Java\jre8\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles%\Java\jre8\lib\ext\" /s /Y
) else (
XCOPY "%CD%\Sec\*.*" "%ProgramFiles(x86)%\Java\jre8\lib\security\" /s /Y
XCOPY "%CD%\Jar\*.*" "%ProgramFiles(x86)%\Java\jre8\lib\ext\" /s /Y
)
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Your Settings have been installed successfully for 8"
) ELSE (
echo( Java NOT present
start /wait /d "%CD%\Message" cscript MessageBox.vbs "Java is not Installed In your system , install Java 1.8 and try to execute settings again"
goto :EXIT
)
REM Presumably there is more code here
:EXIT
REM Presumably there is cleanup code here
Я бы еще многое сделал для улучшения кода, но на данный момент этого достаточно.