Hallo,
was mache ich verkehrt? Ich sitze seit Stunden an meiner Idee und komme ums Verrecken nicht weiter.
Mein Ziel: Java 8 Update 101 auf Windows 7 nur installieren, wenn eine Versionsabfrage nicht den gewünschten Wert ermittelt.
Ist Java installiert, kann ich mit java -version eine Ausgabe analog dieser erzielen:
java -version
java version "1.8.0_101"
Java SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot Client VM (build 25.101-b13, mixed mode)
Ist kein Java installiert, liefert die Abfrage einen Syntax-Fehler (da die Variable/Funktion "Java" nicht registriert ist), was so weit meinem Anliegen aber nicht in die Quere kommt.
Mein nicht funktionierendes Script sieht so aus:
@echo off
java -version findstr ""1.8.0_101"" > NUL
if errorlevel 1 goto install
if errorlevel 0 goto end
:install
REM deinstalliert Java-Versionen ungleich Version 101
WMIC /interactive:off product where 'name like "%%java%%" and (vendor like "%%oracle%%" or vendor like "%%sun%%") and NOT name like "%%Update 101%%"' call uninstall
mkdir "%PROGRAMFILES%\Java"
"C:\jre-8u101-windows-i586.exe" /s
goto end
:end
exit
Ich habe mir schon unendlich viele Bsp. angeschaut aber egal, was ich definiere, es wird immer dumpf das Script von Anfang bis Ende abgearbeitet, ohne die Errorlevel zu berücksichtigen; es ist zum heulen. Die WMIC-Abfrage habe ich aus dem WWW und sie funktioniert - klar, ist ja auch nicht von mir.
Was mache ich falsch?
Danke vorab für jede konstruktive Antwort.
MfG ibicis
Seite 1 von 1
Batch: goto-Anweisung bei errorlevel funktioniert nicht
Anzeige
#2
geschrieben 27. Juli 2016 - 23:08
Hast Du die Pipe bei
nur vergessen abzutippen oder fehlt das bei Dir tatsächlich?
Zwei weitere Dinge:
-- findstr mag kein piped Input. Nimm FIND.
-- java.exe schreibt die Version auf stderr.
-- So funktioniert's:
und wenn Du noch '"' mit suchen willst,
java -version | findstr ""1.8.0_101"" > NUL
nur vergessen abzutippen oder fehlt das bei Dir tatsächlich?
Zwei weitere Dinge:
-- findstr mag kein piped Input. Nimm FIND.
-- java.exe schreibt die Version auf stderr.
-- So funktioniert's:
java -version 2&>1 | find "1.8.0_101" > NUL
und wenn Du noch '"' mit suchen willst,
java -version 2&>1 | find "^"1.8.0_101^"" > NUL
Dieser Beitrag wurde von RalphS bearbeitet: 27. Juli 2016 - 23:17
#3
geschrieben 28. Juli 2016 - 11:18
Hallo,
tausend Dank, ich Horst habe die Pipe doch tatsächlich im Script vergessen!
Es funktioniert trotzdem leider nicht, ich bekomme diesen Fehler, wenn ich "2&>1" vor "|" setze:
"|" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Lasse ich es weg (also "java -version | find "1.8.0_101" > NUL", bekomme ich keine Fehlermeldung, aber das Script wird wieder stumpf von Anfang bis Ende ausgeführt und Java wird installiert.
tausend Dank, ich Horst habe die Pipe doch tatsächlich im Script vergessen!
Es funktioniert trotzdem leider nicht, ich bekomme diesen Fehler, wenn ich "2&>1" vor "|" setze:
"|" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Lasse ich es weg (also "java -version | find "1.8.0_101" > NUL", bekomme ich keine Fehlermeldung, aber das Script wird wieder stumpf von Anfang bis Ende ausgeführt und Java wird installiert.
#4
geschrieben 31. Juli 2016 - 09:25
stderr nach stdout = "2>&1"
so gehts mit find:
und so mit findstr:
g.s.
so gehts mit find:
java -version 2>&1 | find "1.8.0_101" > NUL
und so mit findstr:
java -version 2>&1 | findstr ""1.8.0_102"" > NUL
g.s.
- ← batch Problem mit move
- Skript/Web-Programmierung
- responsive Design - Fullsize Background Image Frage →
Thema verteilen:
Seite 1 von 1