Beim Auslesen von REG-Key eventuelle Fehlermeldung unterdrücken
Hallo zusammen. Möchte in meinem Batch-Script eine Fehlermeldung abfangen, die ausgeworfen wird, wenn ein Registry-Schlüssel nicht vorhanden ist.
Mein Script liest einen Registry-Key aus, beispielsweise die Versionsnummer der Office-Installation.
Das funktioniert allerdings auch nur dann, wenn Office 2003 in irgendeiner Build-Version installiert ist. Ist eine ältere oder jüngere oder gar keine Office-Version auf dem Client installiert, dann bekomme ich immer die Fehlermeldung:
Daraufhin habe ich versucht, die Fehlermeldung, die wohl offensichtlich direkt von der REG.EXE gespuckt wird, zu unterdrücken:
...funktioniert aber nicht. Bin für jede Hilfe dankbar.
Gruß,
R.D.
Mein Script liest einen Registry-Key aus, beispielsweise die Versionsnummer der Office-Installation.
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Office\11.0\Common\ProductVersion" /v LastProduct ^| findstr Last') do call :office "%%a"
Das funktioniert allerdings auch nur dann, wenn Office 2003 in irgendeiner Build-Version installiert ist. Ist eine ältere oder jüngere oder gar keine Office-Version auf dem Client installiert, dann bekomme ich immer die Fehlermeldung:
Fehler: Der angegebene Registrierungsschlüssel oder Wert konnte nicht gefunden werden.
Daraufhin habe ich versucht, die Fehlermeldung, die wohl offensichtlich direkt von der REG.EXE gespuckt wird, zu unterdrücken:
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Office\11.0\Common\ProductVersion" /v LastProduct ^| findstr Last ^>nul 2^>nul ^|^| echo Key nicht gefunden') do call :office "%%a"
...funktioniert aber nicht. Bin für jede Hilfe dankbar.
Gruß,
R.D.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108167
Url: https://administrator.de/contentid/108167
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo,
die Fehlermeldung kommt, wie du schon richtig vermutet hast, von der REG.EXE. Also muß auch deine Fehlerumleitung sich auf die REG.EXE beziehen. Hier mal ein Codebeispiel, wie es funktioniert:
Die Standardausgabe darfst du nicht auf NUL umleiten, da ja sonst dem Befehl findstr nichts übergeben wird. Im Fehlerfall wird durch die Anweisung 2>NUL die Fehlermeldung ins Nirvana geschickt. Die Fehlerbehandlung selbst folgt in der nächsten Zeile. Falls du keine Fehlerbehandlung machen willst, sondern lediglich keine Ausgabe wünschst, dann kannst du das ganze auch folgendermassen abkürzen:
In dem Fall wird eine Fehlermeldung von REG.EXE unterdrückt, die Subroutine :Office nicht ausgeführt und das Script in der nächsten Zeile fortgesetzt.
Ich hoffe das ich dir hiermit weiterhelfen könnte.
Viele Grüsse
die Fehlermeldung kommt, wie du schon richtig vermutet hast, von der REG.EXE. Also muß auch deine Fehlerumleitung sich auf die REG.EXE beziehen. Hier mal ein Codebeispiel, wie es funktioniert:
@echo off
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Office\11.0\Common\ProductVersion" /v LastProduct 2^>nul ^| findstr Last') do set OfficeNr="%%a"
if %OfficeNr%.==. (echo Office-Schlüssel nicht gefunden !!!) else (call :office %OfficeNr%)
Goto Exit
:Office
Echo Office LastProduct-Nr: %1 gefunden
Goto Exit
:Exit
@echo off
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Office\11.0\Common\ProductVersion" /v LastProduct 2^>nul ^| findstr Last') do call :office "%%a"
Goto Exit
:Office
Echo Office LastProduct-Nr: %1 gefunden
Goto Exit
:Exit
Ich hoffe das ich dir hiermit weiterhelfen könnte.
Viele Grüsse
Hallo rdietrich!
Ich würde es zwar eher so
oder besser (da ggf auch in einer "for"-Schleife einsetzbar, ohne dass "delayedExpansion" aktiviert sein muss) so
schreiben, das Ergebnis ist aber das selbe: Wenn die Variable %OfficeNr% nichts enthält (und daher also eigentlich gar nicht existiert), wird der folgende Teil (Ausgabe Fehlermeldung) ausgeführt.
Grüße
bastla
Ich würde es zwar eher so
if "%OfficeNr%"==""
if not defined OfficeNr
Ich habe die Nomenklatur von .==. noch nie gesehen
Du kannst anstelle der Punkte (fast) beliebige Zeichen verwenden, da es ja nur darum geht, zu überprüfen, ob links vom "=" außer dem verwendeten Zeichen (hier also ".") noch mehr steht (was nur der Fall ist, wenn %OfficeNr% einen Inhalt hat).Grüße
bastla