배치 파일이 존재하는 경우 모든 루프가 실행됩니다.

배치 파일이 존재하는 경우 모든 루프가 실행됩니다.

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

코드를 개선하기 위해 할 일이 더 많이 있지만 지금은 이것으로 충분합니다.

관련 정보