Batch Registry Eintrag lesen (mit Steuerzeichen) und neu schreiben
Hallo,
ich will die Internet Einstellung für die Proxyeinstellungen per Batch auslesen, einen Wert hinzufügen und neu schreiben.
Dazu habe ich folgenden Code geschrieben:
Jetzt kommt auf manchen Rechner die Fehlermeldung "Syntaxfehler"
Beim manuellen Auslesen der Registry habe ich dann festgestellt, dass auf den betroffenen Computer in diesem Schlüssel der Registry <local> drin steht.
<code type="plain>
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyOverride REG_SZ fouedb01;ffumentor;;<local>
Anscheinend machen diese spitzen Klammern Probleme, da sie für Dos die Steuerzeichen für Input oder Output sind.
Wie kann ich trotzdem diesen Schlüssel in eine Variable schreiben?
Mir würde es auch genügen, dieses <local> zu ignorieren und später in der Batch hinzuzufügen.
Gruß,
firerazor
ich will die Internet Einstellung für die Proxyeinstellungen per Batch auslesen, einen Wert hinzufügen und neu schreiben.
Dazu habe ich folgenden Code geschrieben:
set KeyInternetSettingCU="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
for /f "tokens=3" %%i in ('reg query %KeyInternetSettingCU% /v ProxyOverride^|find "ProxyOverride"') do @set "actualValue=%%i"
Beim manuellen Auslesen der Registry habe ich dann festgestellt, dass auf den betroffenen Computer in diesem Schlüssel der Registry <local> drin steht.
<code type="plain>
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyOverride REG_SZ fouedb01;ffumentor;;<local>
Anscheinend machen diese spitzen Klammern Probleme, da sie für Dos die Steuerzeichen für Input oder Output sind.
Wie kann ich trotzdem diesen Schlüssel in eine Variable schreiben?
Mir würde es auch genügen, dieses <local> zu ignorieren und später in der Batch hinzuzufügen.
Gruß,
firerazor
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141640
Url: https://administrator.de/contentid/141640
Ausgedruckt am: 26.11.2024 um 14:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo firerazor,
du hast in Zeile 2 den set sauber in Anführungszeichen gesetzt,
ich glaube nicht das der Fehler hier passiert sondern bei der weiteren Verarbeitung von actualValue.
Wenn du den Inhalt an einer Stelle ohne Anführungszeichen bearbeiten musst kannst du die kritischen Zeichen vorher mit ^ escapen.
Dabei ist das Herausfinden der Anzahl von ^ etwas tricky.
Gruß
LotPings
du hast in Zeile 2 den set sauber in Anführungszeichen gesetzt,
ich glaube nicht das der Fehler hier passiert sondern bei der weiteren Verarbeitung von actualValue.
Wenn du den Inhalt an einer Stelle ohne Anführungszeichen bearbeiten musst kannst du die kritischen Zeichen vorher mit ^ escapen.
Dabei ist das Herausfinden der Anzahl von ^ etwas tricky.
Gruß
LotPings
Hallo [@fireraizor],
folgender code:
funktioniert bei mir wunderbar.
Rückgabe:
<code type=plain">*.firma.local;192.18.235.*;<local>
find "ProxyOverride"
könntest du mal gegen findstr /i proxyoverride
ersetzen. Ist schneller und eignet sich hier auch besser.folgender code:
for /F "tokens=3" %i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /V ProxyOverride^|findstr /i "ProxyOverride"') do echo %i
Rückgabe:
<code type=plain">*.firma.local;192.18.235.*;<local>
Moin fireraizor,
wie dat Lordchen schon schrieb - du musst es mit Carets (Caret=^ ) maskieren.
Demo am CMD-Prompt:
nach den zwei Wechsel/Ersetze-SET-Befehlen ("Set "testxxVar=%testxxvar:....%") ist in der LETZTEN angezeigten Zeile der maskierte Inhalt zu sehen.
Den wiederum kannst du gefahrlos durch den Skript schleppen ohne Seiteneffekte.
Beim Schreiben oder ausgeben mit ECHO werden die "^" dann wegradiert.
Grüße
Biber.
wie dat Lordchen schon schrieb - du musst es mit Carets (Caret=^ ) maskieren.
Demo am CMD-Prompt:
>for /f "tokens=3" %i in ("dummy dummy fouedb01;ffumentor;;<local>") do @set "testxxvar=[%i]" & set testxxvar
testxxvar=[fouedb01;ffumentor;;<local>]
>set "testxxvar=%Testxxvar:>=^>%" & set testxxv
testxxvar=[fouedb01;ffumentor;;<local^>]
>set "testxxvar=%Testxxvar:<=^<%" & set testxxv
testxxvar=[fouedb01;ffumentor;;^<local^>]
nach den zwei Wechsel/Ersetze-SET-Befehlen ("Set "testxxVar=%testxxvar:....%") ist in der LETZTEN angezeigten Zeile der maskierte Inhalt zu sehen.
Den wiederum kannst du gefahrlos durch den Skript schleppen ohne Seiteneffekte.
Beim Schreiben oder ausgeben mit ECHO werden die "^" dann wegradiert.
Grüße
Biber.
Moin fileraizor,
nur damit wir aneinander vorbeireden/vorbeiskripten
Grüße
Biber
nur damit wir aneinander vorbeireden/vorbeiskripten
- mein Demo-Ansatz war, dass eventuell vorhandene ">" und "<"-Zeichen erhalten bleiben können (egal, ob da "<local>" steht oder "<global>")
- dein Ansatz ist jetzt aber, dass auf jeden Fall ein Teilstring ";<local>", falls vorhanden, entfernt wird und am Ende in jedem Fall/bei jedem Rechner neu ergänzt wird.
- die eckigen Klammern "[" und "]" in meiner Demo-Set-Anweisung dienten nur zur Kenntlichmachung in der Anzeige. Also lass die beim ersten SET weg (Zeile 02), dann kannst du Zeile 06/07 wieder streichen.
Grüße
Biber