WinFuture-Forum.de: Batch: goto-Anweisung bei errorlevel funktioniert nicht - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Batch: goto-Anweisung bei errorlevel funktioniert nicht


#1 Mitglied ist offline   ibicis 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 21. Juli 16
  • Reputation: 0

geschrieben 27. Juli 2016 - 22:18

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
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. Juli 2016 - 23:08

Hast Du die Pipe bei
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

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   ibicis 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 21. Juli 16
  • Reputation: 0

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.
0

#4 Mitglied ist offline   Shannon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 131
  • Beigetreten: 12. Februar 13
  • Reputation: 11
  • Geschlecht:unbekannt

geschrieben 31. Juli 2016 - 09:25

stderr nach stdout = "2>&1"

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.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0