Batchdatei WENN EXISTIERT, alle Schleifen werden ausgeführt

Batchdatei WENN EXISTIERT, alle Schleifen werden ausgeführt

Ich führe eine Batchdatei aus, die prüft, ob Java\jre6 vorhanden ist. Anschließend wird ein Befehlstyp ausgeführt und anschließend eine Else-Anweisung. Ich stelle jedoch fest, dass alle Anweisungen zusammen ausgeführt werden.

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

Antwort1

Kritische Probleme, die behoben werden müssen:

  • Der IF EXIST-Dateiname muss in Anführungszeichen gesetzt werden, wenn er Leerzeichen (oder schädliche Zeichen wie &) enthält.
  • (Vor dem Beginn eines Codeblocks muss ein Leerzeichen stehen
  • ), ELSE, und (müssen alle in der gleichen Zeile stehen.
  • Ihre Logik ist falsch – es wird immer „Java NOT present“-Code ausgeführt, es sei denn, Version 1.8 ist vorhanden. Sie müssen entweder die gesamte Konstruktion zu einer großen IF ... ELSE IF ...-Kette machen oder am Ende jedes IF-Blocks GOTO :SomeLabel verwenden.

Zusätzliche Vorschläge:

  • ECHO.ist nicht zuverlässig. Es gibt ungewöhnliche Umstände, unter denen es fehlschlagen kann. Gewöhnen Sie sich besser an die Verwendung ECHO(, da es immer funktioniert. Ich weiß, es sieht „falsch“ aus, als würde es Codeblöcke verwirren, aber es ist tatsächlich sehr zuverlässig.
  • ECHO(ist nur erforderlich, wenn Sie nichts anderes als Leerzeichen haben (oder möglicherweise nur Leerzeichen), die als ECHO ausgegeben werden. Aber es schadet sicherlich nicht, immer diese Form zu verwenden.
  • Es ist möglich, mehrere JRE-Versionen auf derselben Maschine zu installieren. Sie können die Reihenfolge umkehren, sodass immer die aktuellste gefundene Version vorbereitet wird.
  • Sofern Sie keinen zusätzlichen Code haben, der oben nicht angezeigt wird, ist GOTO :JAVA nicht erforderlich.
  • Sofern Sie nach :EXIT keinen zusätzlichen Code haben, ist es besser, GOTO :EOFoder zu verwenden EXIT /B, um Ihr Skript einfach zu beenden, ohne dass unten ein Label erforderlich ist.
  • Einrückungen sind Ihr Freund. Sie helfen dabei, die Logik Ihres Codes zu erkennen – und machen ihn viel einfacher zu verstehen.
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

Ich würde noch viel mehr tun, um den Code zu verbessern, aber das soll fürs Erste genug sein.

verwandte Informationen