memphisf
Goto Top

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 Registrierungsschlssel bzw. Wert wurde nicht gefunden.
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.


Wieso gibt er hier am ende noch zwei mal folgendes aus? : FEHLER: Der angegebene Registrierungsschlssel 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 Registrierungsschlssel 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

Content-Key: 1559632052

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: NordicMike
NordicMike 27.11.2021 um 14:04:22 Uhr
Goto Top
reg query HKEY_LOCAL_MACHINE\bla bla >nul

Schickt einen evtl dabei auftretenden Fehler ins Nirvana
Mitglied: 149569
Lösung 149569 27.11.2021 aktualisiert um 16:59:08 Uhr
Goto Top
Sowas macht man doch heute gleich mit der Powershell ...
$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"  
    }
}
Oder noch besser einem PackageManager wie bspw Chocolatey
Mitglied: rubberman
Lösung rubberman 27.11.2021 um 18:11:41 Uhr
Goto Top
Zitat von @MemphisF:
Wieso gibt er hier am ende noch zwei mal folgendes aus? :

Kommt von REG.exe selbst. Die schreibt eine Fehlermeldung zu Stream 2 (StdErr). Musst du explizit mit 2>nul ins Nirvana schicken, á la
reg 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  
BTW: Die FIND.exe macht was Ähnliches wenn der String "1.6.3" gefunden wurde. Sie schreibt dann die komplette Zeile zu Stream 1 (StdOut). Wenn du das nicht sehen willst musst du's per >nul umleiten.

if ==1.6.3 echo Auf dem Client ist die Cryptomatoversion installiert
FEHLER: Der angegebene Registrierungsschlssel bzw. Wert wurde nicht gefunden.
"echo" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Schau mal genau hin: 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
Mitglied: MemphisF
MemphisF 01.12.2021 um 14:29:20 Uhr
Goto Top
Hamma. Vielen Frank