Batch Datei: Regkey überprüfen Errorhandling
Hallo liebe Foren-Mitglieder,
ich nutze folgende Batchdatei, welche ich über unser Softwareverwaltungstool verteile, um zu überprüfen ob zwei Programme auf der aktuellen Version genutzt werden.
Prinzipiell funktioniert die Batch:
@echo off
echo Suche nach Reg Wert der aktuellen Cryptomator Version
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{BCC34416-1A31-393C-9BBB-FB34F3A5F72E} | find "1.6.3" && set CryptoVersion=1.6.3
if %ERRORLEVEL% neq 0 goto keinaktuellesCrypto
if %CryptoVersion%==1.6.3 echo Auf dem Client ist die Cryptomatoversion %CryptoVersion% installiert
echo.
:Dokancheck
echo Suche nach Reg Wert der aktuellen Dokan Version
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{65A3A964-3DC3-0105-0000-210531145800} /V DisplayVersion | find "1.5.0.3000" && set DokanVersion=1.5.0.3000
if %ERRORLEVEL% neq 0 goto keinaktuellesDokan
if %DokanVersion%==1.5.0.3000 echo Auf dem Client ist die Dokanversion %DokanVersion% installiert
::Überprüfung ob Dokan und Crypto aktuell sind
if %CryptoVersion%==1.6.3 if %DokanVersion%==1.5.0.3000 exit 0
:keinaktuellesCrypto
echo Es wurde keine aktuelle Cryptoversion gefunden
goto Dokancheck
:keinaktuellesDokan
echo Es wurde kein aktuelles Dokan gefunden
exit 1
Die Ausgabe sieht dann so aus, wenn z.B. beide Programme nicht aktuell sind:
Suche nach Reg Wert der aktuellen Cryptomator Version
Es wurde keine aktuelle Cryptoversion gefunden
Suche nach Reg Wert der aktuellen Dokan Version
Es wurde kein aktuelles Dokan gefunden
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
Wieso gibt er hier am ende noch zwei mal folgendes aus? : FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
Ich hatte in der Vorversion die zwei Zeilen nicht genutzt und auch nicht die Sprungmarken:
if %ERRORLEVEL% neq 0 goto keinaktuellesDokan
if %ERRORLEVEL% neq 0 goto keinaktuellesCrypto
Dann war das Problem, dass das Batch Skript abgebrochen hat wenn sie den Registrierungsschlüssel nicht gefunden hat:
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{BCC34416-1A31-393C-9BBB-FB34F3A5F72E} | find "1.6.3" && set CryptoVersion=1.6.3
if ==1.6.3 echo Auf dem Client ist die Cryptomatoversion installiert
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
"echo" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Dann hat die Batch abgebroch. Dies sollte aber eigentlich nicht geschehen.
Gibt es hier Leute die sich gut mit Batches auskennen und mir das erklären können bzw. mir verraten wie ich nicht das ERROR-handlig mit den Sprungmarken nutzen muss?
Bin gespannt!
Viele Grüße und besten Dank im voraus
ich nutze folgende Batchdatei, welche ich über unser Softwareverwaltungstool verteile, um zu überprüfen ob zwei Programme auf der aktuellen Version genutzt werden.
Prinzipiell funktioniert die Batch:
@echo off
echo Suche nach Reg Wert der aktuellen Cryptomator Version
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{BCC34416-1A31-393C-9BBB-FB34F3A5F72E} | find "1.6.3" && set CryptoVersion=1.6.3
if %ERRORLEVEL% neq 0 goto keinaktuellesCrypto
if %CryptoVersion%==1.6.3 echo Auf dem Client ist die Cryptomatoversion %CryptoVersion% installiert
echo.
:Dokancheck
echo Suche nach Reg Wert der aktuellen Dokan Version
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{65A3A964-3DC3-0105-0000-210531145800} /V DisplayVersion | find "1.5.0.3000" && set DokanVersion=1.5.0.3000
if %ERRORLEVEL% neq 0 goto keinaktuellesDokan
if %DokanVersion%==1.5.0.3000 echo Auf dem Client ist die Dokanversion %DokanVersion% installiert
::Überprüfung ob Dokan und Crypto aktuell sind
if %CryptoVersion%==1.6.3 if %DokanVersion%==1.5.0.3000 exit 0
:keinaktuellesCrypto
echo Es wurde keine aktuelle Cryptoversion gefunden
goto Dokancheck
:keinaktuellesDokan
echo Es wurde kein aktuelles Dokan gefunden
exit 1
Die Ausgabe sieht dann so aus, wenn z.B. beide Programme nicht aktuell sind:
Suche nach Reg Wert der aktuellen Cryptomator Version
Es wurde keine aktuelle Cryptoversion gefunden
Suche nach Reg Wert der aktuellen Dokan Version
Es wurde kein aktuelles Dokan gefunden
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
Wieso gibt er hier am ende noch zwei mal folgendes aus? : FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
Ich hatte in der Vorversion die zwei Zeilen nicht genutzt und auch nicht die Sprungmarken:
if %ERRORLEVEL% neq 0 goto keinaktuellesDokan
if %ERRORLEVEL% neq 0 goto keinaktuellesCrypto
Dann war das Problem, dass das Batch Skript abgebrochen hat wenn sie den Registrierungsschlüssel nicht gefunden hat:
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{BCC34416-1A31-393C-9BBB-FB34F3A5F72E} | find "1.6.3" && set CryptoVersion=1.6.3
if ==1.6.3 echo Auf dem Client ist die Cryptomatoversion installiert
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
"echo" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Dann hat die Batch abgebroch. Dies sollte aber eigentlich nicht geschehen.
Gibt es hier Leute die sich gut mit Batches auskennen und mir das erklären können bzw. mir verraten wie ich nicht das ERROR-handlig mit den Sprungmarken nutzen muss?
Bin gespannt!
Viele Grüße und besten Dank im voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1559632052
Url: https://administrator.de/forum/batch-datei-regkey-ueberpruefen-errorhandling-1559632052.html
Ausgedruckt am: 21.12.2024 um 16:12 Uhr
4 Kommentare
Neuester Kommentar
Sowas macht man doch heute gleich mit der Powershell ...
Oder noch besser einem PackageManager wie bspw Chocolatey
$prog = Get-Package | ? Name -like '*Cryptomator*'
if (!$prog){
"not installed"
}else{
if ([version]$prog.Version -lt [version]'1.6.3'){
"old version"
}else{
"current version"
}
}
Kommt von REG.exe selbst. Die schreibt eine Fehlermeldung zu Stream 2 (StdErr). Musst du explizit mit
2>nul
ins Nirvana schicken, á lareg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{BCC34416-1A31-393C-9BBB-FB34F3A5F72E}" 2>nul | find "1.6.3" && set CryptoVersion=1.6.3
>nul
umleiten.if ==1.6.3 echo Auf dem Client ist die Cryptomatoversion installiert
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
"echo" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Schau mal genau hin: FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
"echo" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
if ==1.6.3
Die Variable %CryptoVersion% ist nicht definiert und somit ist die Syntax für das IF Statement nicht mehr gegeben, da vor dem == kein Vergleichsoperand steht.
Lässt sich mit Anführungszeichen auf beiden Seiten umgehen.
if "%CryptoVersion%"=="1.6.3" ...
Steffen