zensbert
Goto Top

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

Content-Key: 111805

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

Printed on: April 23, 2024 at 08:04 o'clock

Member: DerWoWusste
DerWoWusste Mar 18, 2009 at 20:05:16 (UTC)
Goto Top
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.
Member: Biber
Biber Mar 18, 2009 at 20:18:31 (UTC)
Goto Top
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:
@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%
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:
>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.... face-wink
[/Edit]
Member: zensbert
zensbert Mar 18, 2009 at 21:22:26 (UTC)
Goto Top
also das mit den Zusatztool zum Ersetzen würde ich am liebsten lassen, dann müsste ich noch ein zusatztool holen..
da ist der ansatz von biber besser, nur dass Problem ist ja dass ich so immer noch nicht den wert ausgelesen habe, da du sie ja nicht einliest sondern sie vorgibst (oldkey).

hab jetzt aus deiner vorlage das gemacht:
@echo off & setlocal

set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run""
Set "qrycmd= reg query %regkey% /v avgnt"
FOR /F "tokens=3*" %%A IN ('%qrycmd%') DO SET startup=%%B
Echo %startup%
Set "addcmd=reg add %regkey% /v avgnt "%startup:"=\"% /nosplash" /f"
%addcmd%
pause

dann gibt er aus:
REG_SZ "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min

Fehler: Zu viele Befehlszeilenparameter
Drücken Sie eine beliebige Taste . . .

Soweit so gut Kompletter Pfad in Variable, nur dass REG_SZ führt natürlich zu einem Fehler..
hab versucht es mit dem token wegzubekommen, aber das hab ich nich hingekriegt..
2m vorm Ziel.. bald gehts^^
danke im voraus
Member: DerWoWusste
DerWoWusste Mar 18, 2009 at 21:35:58 (UTC)
Goto Top
Das Zusatztool ist eine einzelstehende .exe, Freeware und wiegt etwa 50 kb, wenn ich mich recht erinnere. Aber bitte, probier es anders.
Member: bastla
bastla Mar 18, 2009 at 23:44:18 (UTC)
Goto Top
Hallo chizophren!

Was erhältst Du denn mit "tokens=4*" ?

Grüße
bastla
Member: zensbert
zensbert Mar 19, 2009 at 07:45:44 (UTC)
Goto Top
Trotzdem Danke an DerWoWusste, nur ich versuch das zu vermeiden, da das nur ein Programm-Unterteil ist, und ich schon dutzende zusatztools nutze..

an Bastla:
wenn ich tokens auf 4 setze kommt:

/min

Fehler: Zu viele Befehlszeilenparameter
Drücken Sie eine beliebige Taste . . .

Greetz,
Thomas
Member: Biber
Biber Mar 19, 2009 at 08:23:59 (UTC)
Goto Top
Moin chizophren,

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%
Output der Skizze:
>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.
---> die zu zeigende Zeile ist die Outputzeile 14 beginnend mit "myoldvalue"

Grüße
Biber
Member: zensbert
zensbert Mar 19, 2009 at 10:23:13 (UTC)
Goto Top
Ah Super, jetzt hab ich den Pfad in der Variable..
bekomme nur mit der Batch:
@echo off & setlocal
set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run""  
Set "qrycmd= reg query %regkey% /v avgnt"  
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "startup=%%j"  
echo %startup%
pause
Set "addcmd=reg add %regkey% /v avgnt "%startup:"=\"% /nosplash" /f"  
echo %addcmd%
%addcmd%
pause

Die Ausgabe:
"C:\Programme\Avira\AntiVir Desktop\avgnt.exe" /min  
Drücken Sie eine beliebige Taste . . .
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt "\"C:\Prog  
ramme\Avira\AntiVir Desktop\avgnt.exe\" /min /nosplash" /f  

Fehler: Zu viele Befehlszeilenparameter
Drücken Sie eine beliebige Taste . . .

Da macht das Backslash Probleme beim Reg Add..
Eine Idee? Soweit schon mal tausend Dank..
Gruß
Thomas
Member: Biber
Biber Mar 19, 2009 at 10:45:58 (UTC)
Goto Top
Moin chizophren,

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 face-wink
Member: zensbert
zensbert Mar 19, 2009 at 18:36:04 (UTC)
Goto Top
Danke Biber, DerWoWusste und natürlich Bastla..

Super klappt alles..