REG-DWORD-Wert aus Registry auslesen und mittels IF-Abfrage prüfen?
Hallo,
ich möchte gerne über eine Batch-Datei auslesen, ob in den Internet-Einstellungen ein Proxy gesetzt ist und über eine IF-Abfrage einen Paramter setzen lassen - was mir partout nicht gelingt.
Dieses ist die Abfrage, die anscheinend zum gewünschten Ergebnis führt:
Der Wert ProxyEnable in der Registry ist anscheinend vom Typ REG_DWORD und enthält entweder "0x00000000" oder "0x00000001", was in der Variable proxyenable als "0x0" oder "0x1" gespeichert wird (das sagt jedenfalls eine ECHO %proxyenable%-Ausgabe).
Nun versuche ich, den Inhalt von proxyenable mittels folgender IF-Abfrage zu prüfen:
Aber anscheinend mache ich bei dieser Abfrage etwas falsch, denn die Variable useproxy erhält niemals den Wert "--proxy=on" 
Was mache ich bei dieser Abfrage falsch?
Viele Grüße
cool400
ich möchte gerne über eine Batch-Datei auslesen, ob in den Internet-Einstellungen ein Proxy gesetzt ist und über eine IF-Abfrage einen Paramter setzen lassen - was mir partout nicht gelingt.
Dieses ist die Abfrage, die anscheinend zum gewünschten Ergebnis führt:
FOR /F "SKIP=2 USEBACKQ TOKENS=3 DELIMS= " %%i IN (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable`) DO SET proxyenable=%%i
Nun versuche ich, den Inhalt von proxyenable mittels folgender IF-Abfrage zu prüfen:
IF %proxyenable%=="0x1" SET useproxy="--proxy=on"
Was mache ich bei dieser Abfrage falsch?
Viele Grüße
cool400
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 88327
Url: https://administrator.de/forum/reg-dword-wert-aus-registry-auslesen-und-mittels-if-abfrage-pruefen-88327.html
Ausgedruckt am: 20.05.2025 um 20:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo cool400 und willkommen im Forum!
So sollte es klappen:
Kurze Erklärung: Wenn Du "DELIMS" nicht angibst, wird defaultmäßig bei Blank UND Tab getrennt - da die Ausgabe von "REG QUERY" durch Tabs getrennt ist, funktioniert dann die Zerlegung.
Da aber Deine Frage lautete "Was mache ich bei dieser Abfrage falsch?" auch dazu noch eine Antwort: Wenn Du den Ausdruck rechts vom Vergleichsoperator (hier "==") in Anführungszeichen einschließt, musst Du es auch links tun ...
Grüße
bastla
So sollte es klappen:
FOR /F "SKIP=2 USEBACKQ TOKENS=3" %%i IN (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable`) DO SET "proxyenable=%%i"
IF "%proxyenable%"=="0x1" SET useproxy="--proxy=on"
Da aber Deine Frage lautete "Was mache ich bei dieser Abfrage falsch?" auch dazu noch eine Antwort: Wenn Du den Ausdruck rechts vom Vergleichsoperator (hier "==") in Anführungszeichen einschließt, musst Du es auch links tun ...
Grüße
bastla
Hallo cool400!
Aber jedenfalls: Danke für das in mich gesetzte Vertrauen. 
In dieser Form kann der Wert auch aus mehreren (durch Leerzeichen getrennten) Teilen bestehen (zB bei REG_SZ), da alles nach dem zweiten Teil der relevanten Zeile in der Ausgabe von "reg query" als "Wert" verwendet wird. Das Überspringen auch der ersten 4 Zeilen des Abfrageergebnisses (mit "skip=4") bringt vermutlich nur einen kaum messbaren Performancegewinn ...
Die Erklärung zu "skip" etc findest Du übrigens mit "for /?".
Grüße
bastla
nachdem ich bereits etwas in diesem Forum mitgelesen habe, habe ich mir fast gedacht, dass Du (als Erster) die Antwort weißt 
Gewusst hätten das sicher auch andere, ich bin nur anscheinend zu oft hier. ich kann anscheinend auch überall die Anführungszeichen weglassen, richtig?
Nahezu überall - beim Reg-Pfad mit enthaltenen Leerzeichen brauchst Du sie auf jeden Fall. Ansonsten setze ich grundsätzlich eher zu viele als zu wenig Anführungszeichen (denn schaden können sie eigentlich nur in Ausnahmefällen).Oder gibt es irgendwelche Vor-/Nachteile, ob ich die Abfrage mit bzw. ohne Quotes mache?
Der Vorteil ist aus meiner Sicht die genauere Kontrolle über Beginn und Ende eines Strings ...Und zuletzt: funktioniert Deine Registry-Abfrage für (nahezu) jegliche zu erwartende Werte?
Etwas verallgemeinern könntest Du sie noch so:for /f "skip=4 tokens=2*" %%i in ('reg query ....') do set "Wert=%%j"
Die Erklärung zu "skip" etc findest Du übrigens mit "for /?".
Grüße
bastla