Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Registry-Wert mit Batch auslesen, ändern und wieder einspielen

Frage Entwicklung Batch & Shell

Mitglied: zensbert

zensbert (Level 1) - Jetzt verbinden

18.03.2009, aktualisiert 20:10 Uhr, 12088 Aufrufe, 10 Kommentare

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
Mitglied: DerWoWusste
18.03.2009 um 21:05 Uhr
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.
Bitte warten ..
Mitglied: Biber
18.03.2009 um 21:18 Uhr
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:
01.
@echo off & setlocal 
02.
 
03.
set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" 
04.
set "oldvalue="C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min" 
05.
Set "addcmd=reg add %regkey% /v avgnt /t REG_SZ /d "%oldvalue:"=\"% /nosplash" /f" 
06.
Set "qrycmd= reg query %regkey% /v avgnt" 
07.
Set "delcmd=reg delete %regkey% /v avgnt /f" 
08.
echo [%addcmd%] 
09.
%addcmd% 
10.
echo [%qrycmd%] 
11.
%qrycmd% 
12.
%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:
01.
>e:\schnipsel\regmani.cmd 
02.
[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] 
03.
 
04.
 
05.
Der Vorgang wurde erfolgreich ausgeführt. 
06.
[ reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt] 
07.
 
08.
! REG.EXE VERSION 3.0 
09.
 
10.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
11.
    avgnt       REG_SZ  "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash 
12.
 
13.
 
14.
(=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]
Bitte warten ..
Mitglied: zensbert
18.03.2009 um 22:22 Uhr
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
Bitte warten ..
Mitglied: DerWoWusste
18.03.2009 um 22:35 Uhr
Das Zusatztool ist eine einzelstehende .exe, Freeware und wiegt etwa 50 kb, wenn ich mich recht erinnere. Aber bitte, probier es anders.
Bitte warten ..
Mitglied: bastla
19.03.2009 um 00:44 Uhr
Hallo chizophren!

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

Grüße
bastla
Bitte warten ..
Mitglied: zensbert
19.03.2009 um 08:45 Uhr
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
Bitte warten ..
Mitglied: Biber
19.03.2009 um 09:23 Uhr
Moin chizophren,

kann im Moment die Problematik nicht so bedrohlich finden...
Hier noch mal der Schnellschuss von gestern um drei Demo-Zeilen erweitert:
01.
@echo off & setlocal 
02.
 
03.
set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" 
04.
set "oldvalue="C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min" 
05.
Set "addcmd=reg add %regkey% /v avgnt /t REG_SZ /d "%oldvalue:"=\"% /nosplash" /f" 
06.
Set "qrycmd= reg query %regkey% /v avgnt" 
07.
Set "delcmd=reg delete %regkey% /v avgnt /f" 
08.
 
09.
 
10.
echo [%addcmd%] 
11.
%addcmd% 
12.
echo [%qrycmd%] 
13.
%qrycmd% 
14.
 
15.
echo FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do Set "myoldvalue=%%j" 
16.
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "myOldvalue=%%j" 
17.
echo myoldvalue: [%myoldvalue%] 
18.
%delcmd%
Output der Skizze:
01.
>e:\schnipsel\regmani.cmd 
02.
[reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt /t REG_SZ /d "\"C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe\ 
03.
 
04.
 
05.
Der Vorgang wurde erfolgreich ausgeführt. 
06.
[ reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt] 
07.
 
08.
! REG.EXE VERSION 3.0 
09.
 
10.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
11.
    avgnt       REG_SZ  "C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash 
12.
 
13.
FOR /F "tokens=2*" %i in (' reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt|find "REG_SZ"') do Set "myoldvalue=%j" 
14.
myoldvalue: ["C:\Programme\Avira\Avira Premium Security Suite\avgnt.exe" /min /nosplash] 
15.
 
16.
Der Vorgang wurde erfolgreich ausgeführt.
---> die zu zeigende Zeile ist die Outputzeile 14 beginnend mit "myoldvalue"

Grüße
Biber
Bitte warten ..
Mitglied: zensbert
19.03.2009 um 11:23 Uhr
Ah Super, jetzt hab ich den Pfad in der Variable..
bekomme nur mit der Batch:
01.
@echo off & setlocal 
02.
set "regkey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"" 
03.
Set "qrycmd= reg query %regkey% /v avgnt" 
04.
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "startup=%%j" 
05.
echo %startup% 
06.
pause 
07.
Set "addcmd=reg add %regkey% /v avgnt "%startup:"=\"% /nosplash" /f" 
08.
echo %addcmd% 
09.
%addcmd% 
10.
pause 
11.
 
12.
 
Die Ausgabe:
01.
"C:\Programme\Avira\AntiVir Desktop\avgnt.exe" /min 
02.
Drücken Sie eine beliebige Taste . . . 
03.
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v avgnt "\"C:\Prog 
04.
ramme\Avira\AntiVir Desktop\avgnt.exe\" /min /nosplash" /f 
05.
 
06.
Fehler: Zu viele Befehlszeilenparameter 
07.
Drücken Sie eine beliebige Taste . . .
Da macht das Backslash Probleme beim Reg Add..
Eine Idee? Soweit schon mal tausend Dank..
Gruß
Thomas
Bitte warten ..
Mitglied: Biber
19.03.2009 um 11:45 Uhr
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
Bitte warten ..
Mitglied: zensbert
19.03.2009 um 19:36 Uhr
Danke Biber, DerWoWusste und natürlich Bastla..

Super klappt alles..
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...