Java\jre6이 있는지 확인한 다음 한 가지 유형의 명령이 실행되고 마지막으로 else 문이 실행되는지 확인하는 배치 파일을 실행하고 있지만 모든 stmt가 함께 실행되는 것을 발견했습니다.
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
및(
모두 같은 줄에 나타나야 합니다.- 귀하의 논리가 잘못되었습니다. 버전 1.8이 존재하지 않는 한 항상 "Java NOT Present" 코드가 실행됩니다. 전체 구성을 하나의 큰 IF ... ELSE IF ... 체인으로 만들거나 각 IF 블록 끝에 GOTO :SomeLabel을 만들어야 합니다.
추가 제안:
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
코드를 개선하기 위해 할 일이 더 많이 있지만 지금은 이것으로 충분합니다.