pinkywesen
Goto Top

If ERRORLEVEL Registry Abfrage

Ich habe ein Problem mit einer "if ERRORLEVEL" Abfrage

Guten Tag liebe Administrator.de Mitglieder,
Ich hab folgendes Batch-Problem. Und zwar will ich mehre Registrierungs Werte abfragen und in einer Text Datei speichern. Aber wenn diese nicht existieren soll das nicht vermerkt werden einfach zum nächsten springen. Hier meine Batch Datei:

if ERRORLEVEL 1 goto next1
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductInformation" >> product.txt   
:next1
...

So da dieser Registrierungs Wert immer hoffe ich immer existiert ist das ja kein Problem. Aber wenn ein anderer Registry-Wert mal nicht existiert funktioniert mein Script nicht. Die product.txt sieht dann immer folgendermaßen aus:

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Wie kann ich dies verhindern ?

Danke im Vorraus für alle Poster !

Content-Key: 142768

Url: https://administrator.de/contentid/142768

Printed on: April 25, 2024 at 23:04 o'clock

Mitglied: 77559
77559 May 13, 2010 at 12:39:56 (UTC)
Goto Top
Moin,

du kannst einen errorlevel nicht im Voraus abfragen, das ist nicht vbscript.
setz den Reg Query nochmal mit Redirection auf Nul davor.

Gruß
LotPings

@bastla, ja stand schon von Anfang an da face-wink
Member: bastla
bastla May 13, 2010 at 13:07:19 (UTC)
Goto Top
Hallo Pinkywesen!

Wie LotPings schon angemerkt hat, ist die Abfrage vorweg eigentlich nicht möglich - Du könntest es aber so (mäßig elegant) versuchen:
set q="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductInformation"  
reg query %q%>nul 2>&1 && reg query %q%>>product.txt
Im Zweifelsfall würde ich aber eher eine "for /f"-Schleife herumbauen und dann auch nur die interessierende(n) Zeile(n) ausgeben ...

Grüße
bastla

[Edit] @77559: Stand Deine zweite Zeile auch vorher schon da? Wenn ja, hat mich der Winterschlaf wohl doch nochmal eingeholt ... face-wink[/Edit]
Member: Pinkywesen
Pinkywesen May 13, 2010 at 23:28:08 (UTC)
Goto Top
Zitat von @bastla:
Hallo Pinkywesen!

Wie LotPings schon angemerkt hat, ist die Abfrage vorweg eigentlich nicht möglich - Du könntest es
aber so (mäßig elegant) versuchen:
set q="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductInformation"  
> reg query %q%>nul 2>&1 && reg query %q%>>product.txt
> 
Im Zweifelsfall würde ich aber eher eine "for /f"-Schleife herumbauen und dann auch nur die interessierende(n)
Zeile(n) ausgeben ...

Grüße
bastla

[Edit] @77559: Stand Deine zweite Zeile auch vorher schon da? Wenn ja, hat mich der Winterschlaf wohl doch nochmal eingeholt
... face-wink[/Edit]


Danke erstmal für deine Antwort,
aber dein Script funktioniert bei mir gar nicht. Es gibt nichts aus. Kannst du das mit der "for" Schleife bitter näher erläutern ?
Member: bastla
bastla May 14, 2010 at 09:53:13 (UTC)
Goto Top
Hallo Pinkywesen!
... dein Script funktioniert bei mir gar nicht. Es gibt nichts aus.
Eigentlich hätte ich angenommen, dass genau das erwünscht wäre: Wenn der nicht-existente Wert von "ProductInformation" ausgelesen werden soll, wird der Datei "product.txt" nichts hinzugefügt; wenn Du "ProductInformation" durch zB "CSDVersion" ersetzt, sollte auch ein Eintrag in der Datei erzeugt werden.
Mit einer "for"-Schleife (einzugeben direkt in die Kommandozeile, bzw in einem Batch mit %%i und %%j zu schreiben) sähe das dann so aus:
for /f "skip=4 tokens=2*" %i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CSDVersion" 2^>nul') do @echo %j
erzeugt bei mir (XP SP3) die folgende Ausgabe:
Service Pack 3
Wenn anstelle von "CSDVersion" der (nicht vorhandene) Wert von "CDVersion" abgefragt würde, wäre das Ergebnis einfach gar keine Ausgabe (also auch ohne Fehlermeldung); genauso, wie wenn etwa anstelle von "CurrentVersion" nur "CurrVersion" verwendet würde ...

Grüße
bastla
Mitglied: 77559
77559 May 14, 2010 at 10:00:13 (UTC)
Goto Top
Moin,
Bastla war schneller, ich poste meine ähnliche Antwort trotzdem.

Zitat von @Pinkywesen:
aber dein Script funktioniert bei mir gar nicht. Es gibt nichts aus.
Das stimmt nicht, es funkltioniert.
Und das es bei nicht vorhandenem Value ProductInformation NICHTS ausgibt, war doch genau deine Frage!
Bei meinen WinXP Pro und Win7Ultimate64Bit kommt da auch nichts.

Kannst du das mit der "for" Schleife bitter näher erläutern ?
Ich kann das auch süß oder herzhaft erklären,
aber wenn die Abfrage ein leeres Ergebnis erzeugt hilft auch die for schleife nicht.

Du kannst Produkt Informationen über den Value
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
erhalten , hier wäre eine for Schleife angebracht um mit findstr nach DisplaName und DisplayVersiom zu filtern.

oder auch mit WMIC über mit Windows Installer installierte Software
wmic product get Name, Version
erhalten.

Gruß
LotPings