Registry-Wert mit Batch auslesen, ändern und wieder einspielen
Servus,
Ich weiss dass es schon dazu Themen gibt und normalerweise klappt das sonst auch immer wenn ich in Batches mit der Registry arbeite aber ich habe hier grad irgendwie Denkblockade.
Möchte den Key "avgnt" aus "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" auslesen, der den wert ""C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min" enthält.
dieser Wert soll in eine Variable, und dann mit einem Zusatz wieder eingespielt werden, ca so:
Echo Lese Installationspfad aus Registry..
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt') DO SET startup=%%B
ping 127.0.0.1 -n 2 >nul
Echo.
Echo Žndere Registrywert..
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "avgnt" /t REG_SZ /d "%startup% /nosplash" /f >nul
ping 127.0.0.1 -n 2 >nul
Aber: der Wert avgnt enthält schon hochkommata: "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min
weshalb er sich nicht einlesen lässt.
Nächstes Problem ist, dass wenn ich ihn Einlesen kann auch da die Hochkommata stören, da der Zusatz den ich an den Wert hängen will ein Leerzeichen hat.
Zusammengefasst:
Dort steht
"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min
muss aber
"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash
sein
der Programmpfad muss an der Stelle in der Registry eingelesen werden, da die Avira Produkte auf die das angewandt werden soll verschieden sind.
Für die dies interessiert, das Ändern dieses AutoRun-Wertes deaktiviert den Splash-Bildschirm beim Systemstart von Avira, egal welche Version.
thx
Thomas
Ich weiss dass es schon dazu Themen gibt und normalerweise klappt das sonst auch immer wenn ich in Batches mit der Registry arbeite aber ich habe hier grad irgendwie Denkblockade.
Möchte den Key "avgnt" aus "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" auslesen, der den wert ""C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min" enthält.
dieser Wert soll in eine Variable, und dann mit einem Zusatz wieder eingespielt werden, ca so:
Echo Lese Installationspfad aus Registry..
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt') DO SET startup=%%B
ping 127.0.0.1 -n 2 >nul
Echo.
Echo Žndere Registrywert..
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "avgnt" /t REG_SZ /d "%startup% /nosplash" /f >nul
ping 127.0.0.1 -n 2 >nul
Aber: der Wert avgnt enthält schon hochkommata: "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min
weshalb er sich nicht einlesen lässt.
Nächstes Problem ist, dass wenn ich ihn Einlesen kann auch da die Hochkommata stören, da der Zusatz den ich an den Wert hängen will ein Leerzeichen hat.
Zusammengefasst:
Dort steht
"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min
muss aber
"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash
sein
der Programmpfad muss an der Stelle in der Registry eingelesen werden, da die Avira Produkte auf die das angewandt werden soll verschieden sind.
Für die dies interessiert, das Ändern dieses AutoRun-Wertes deaktiviert den Splash-Bildschirm beim Systemstart von Avira, egal welche Version.
thx
Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 111805
Url: https://administrator.de/contentid/111805
Ausgedruckt am: 24.11.2024 um 14:11 Uhr
10 Kommentare
Neuester Kommentar
Zwei Wege umgehen Dein Problem: Dumpe diesen Schlüssel in eine .reg-Datei (regedit /e macht das), wende einen Kommandozeilen-Textersetzer darauf an (dossr.exe von MonkeyJob Systems, Freeware) und ersetzte die Zeile durch die passende und lies die reg-Datei dann wieder ein (mit regedit /s)
Oder aber, Du nutzt GPPs, die können Registrywerte ändern in Abhängigkeit davon, wie sie lauten/ob vorhanden.
Oder aber, Du nutzt GPPs, die können Registrywerte ändern in Abhängigkeit davon, wie sie lauten/ob vorhanden.
Moin chizophren,
das Geheimnis des erfolgreichen Bätchens ist, eine ähnlich verquere Phantasie wie die Redmonder PraktikantInnen zu entwickeln.
Versuchs mal.... WTF kann sich wohl so ein M$-Azubi wohl ausgedacht haben, um Anführungszeichen zu maskieren?
Die drei oder vier Ideen, die dem gekommen sind, die lassen sich in anderthalb Minuten durchkaspern.
Ergebnis: Mit einem Backslash lässt sich ein Anführungszeichen maskieren.
Mini-Demo:
Dieser Schnipsel setzt [mit Zusatzvalue /nosplash] , liest aus und löscht den von Dir angeforderten regKey.
[ Löschen bei mir, weil es den Key vorher nicht gab und entsprechend auch nicht geben soll.]
Demo-Aufruf-Output:
Der Clou ist nur, dass im Wert %oldvalue% (siehe im Code) alle Anführungszeichen durch Backslash-Anfüzeichen ersetzt werden müssen.
Das macht dieses ........... %oldvalue:"=\"% ......
Thats all.
Grüße
Biber
[Edit] @DerWoWusste
[/Edit]
das Geheimnis des erfolgreichen Bätchens ist, eine ähnlich verquere Phantasie wie die Redmonder PraktikantInnen zu entwickeln.
Versuchs mal.... WTF kann sich wohl so ein M$-Azubi wohl ausgedacht haben, um Anführungszeichen zu maskieren?
Die drei oder vier Ideen, die dem gekommen sind, die lassen sich in anderthalb Minuten durchkaspern.
Ergebnis: Mit einem Backslash lässt sich ein Anführungszeichen maskieren.
Mini-Demo:
@echo off & setlocal
set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run""
set "oldvalue="C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min"
Set "addcmd=reg add %regkey% /v avgnt /t REG_SZ /d "%oldvalue:"=\"% /nosplash" /f"
Set "qrycmd= reg query %regkey% /v avgnt"
Set "delcmd=reg delete %regkey% /v avgnt /f"
echo [%addcmd%]
%addcmd%
echo [%qrycmd%]
%qrycmd%
%delcmd%
[ Löschen bei mir, weil es den Key vorher nicht gab und entsprechend auch nicht geben soll.]
Demo-Aufruf-Output:
>e:\schnipsel\regmani.cmd
[reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt /t REG_SZ /d "\"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe\" /min /nosplash" /f]
Der Vorgang wurde erfolgreich ausgeführt.
[ reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt]
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
avgnt REG_SZ "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash
(=21:20:05 D:\temp=)
Der Clou ist nur, dass im Wert %oldvalue% (siehe im Code) alle Anführungszeichen durch Backslash-Anfüzeichen ersetzt werden müssen.
Das macht dieses ........... %oldvalue:"=\"% ......
Thats all.
Grüße
Biber
[Edit] @DerWoWusste
Zwei Wege umgehen Dein Problem:
genauer gesagt: Mindestens zwei, vermutlich aber zweihundert.... [/Edit]
Moin chizophren,
kann im Moment die Problematik nicht so bedrohlich finden...
Hier noch mal der Schnellschuss von gestern um drei Demo-Zeilen erweitert:
Output der Skizze:
---> die zu zeigende Zeile ist die Outputzeile 14 beginnend mit "myoldvalue"
Grüße
Biber
kann im Moment die Problematik nicht so bedrohlich finden...
Hier noch mal der Schnellschuss von gestern um drei Demo-Zeilen erweitert:
@echo off & setlocal
set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run""
set "oldvalue="C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min"
Set "addcmd=reg add %regkey% /v avgnt /t REG_SZ /d "%oldvalue:"=\"% /nosplash" /f"
Set "qrycmd= reg query %regkey% /v avgnt"
Set "delcmd=reg delete %regkey% /v avgnt /f"
echo [%addcmd%]
%addcmd%
echo [%qrycmd%]
%qrycmd%
echo FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do Set "myoldvalue=%%j"
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "myOldvalue=%%j"
echo myoldvalue: [%myoldvalue%]
%delcmd%
>e:\schnipsel\regmani.cmd
[reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt /t REG_SZ /d "\"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe\
Der Vorgang wurde erfolgreich ausgeführt.
[ reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt]
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
avgnt REG_SZ "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash
FOR /F "tokens=2*" %i in (' reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt|find "REG_SZ"') do Set "myoldvalue=%j"
myoldvalue: ["C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash]
Der Vorgang wurde erfolgreich ausgeführt.
Grüße
Biber
Moin chizophren,
Es ist (je nach Sichtweise) entweder ein Parameter zuviel oder zuwenig.
Empfehlung.
Grüße
Biber
P.S.
Fehler: Zu viele Befehlszeilenparameter
okay, okay.. die Fehlermeldung ist richtig, aber irreführend...Es ist (je nach Sichtweise) entweder ein Parameter zuviel oder zuwenig.
Set "addcmd=reg add %regkey% /v avgnt "%startup:"=\"% /nosplash" /f"
> Hier fehlt bei Dir der Parameter "/D " wie "/Data", der diesem kryptischen String ja vorangehen muss.Empfehlung.
Set "addcmd=reg add %regkey% /v avgnt /D "%startup:"=\"% /nosplash" /f"
Den anderen Parameter "/t REG_SZ" == "Datentyp REG_SZ" habe ich bewusst weggelassen, weil der m.W. der Default ist.Grüße
Biber
P.S.
Da macht das Backslash Probleme beim Reg Add..
So etwas bezeichnen wir Biber als voreiligen logischen Trugschluss... davon steht nix in der Fehlermeldung