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

Registrywert mittels Batch ändern

Frage Entwicklung Batch & Shell

Mitglied: tomost

tomost (Level 1) - Jetzt verbinden

16.11.2007, aktualisiert 20.11.2007, 9749 Aufrufe, 9 Kommentare

Tag zusammen,
ich hab hier im Forum schon ein wenig geforscht aber leider nicht die passende Lösung gefunden, bzw. gefunden schon, klappt aber bei meiner Datei nicht.
Ich möchte mittels einer batch einen Teil der Registry in eine textdatei exportieren, darin einen Wert ändern und dann wieder in die Registry importieren.
Ex- und import ist kein Problem das schaff ich, nur den Wert ändern, da haperts.
Ich hab hier im Forum schon ein vbs script gefunden was search and replace macht, aber damit wird meine txt Datei zerstört.
Ich vermute es liegt daran das jede menge Sonderzeichen ({,@,:, usw.) darin enthalten sind.
Um genauer zu werden:
Ich möchte in meiner export-datei die folgenden Inhalt hat:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}]
@="Netzwerkadapter"
"Class"="Net"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\Descriptions]
"Broadcom NetXtreme 57xx Gigabit Controller"=hex(7):31,00,00,00,00,00
"Intel(R) PRO/Wireless 3945ABG Network Connection"=hex(7):31,00,00,00,00,00
"Asynchroner RAS-Adapter"=hex(7):31,00,00,00,00,00
"WAN-Miniport (L2TP)"=hex(7):31,00,00,00,00,00
"WAN-Miniport (PPTP)"=hex(7):31,00,00,00,00,00
"WAN-Miniport (PPPOE)"=hex(7):31,00,00,00,00,00
"Parallelanschluss (direkt)"=hex(7):31,00,00,00,00,00
"WAN-Miniport (IP)"=hex(7):31,00,00,00,00,00
"Deterministic Network Enhancer Miniport"=hex(7):31,00,00,00,32,00,00,00,33,00,\
00,00,34,00,00,00,00,00
"Cisco Systems VPN Adapter"=hex(7):31,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{008BFB96-5C7B-43B5-ACCC-012F2C0710D9}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{008BFB96-5C7B-43B5-ACCC-012F2C0710D9}\Connection]
"PnpInstanceID"="ROOT\\NET\\0000"
"MediaSubType"=dword:00000001
"Name"="LAN-Verbindung 2"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5549A6BD-AD05-47EF-947C-E709B5981798}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5549A6BD-AD05-47EF-947C-E709B5981798}\Connection]
"PnpInstanceID"="PCI\\VEN_14E4&DEV_1600&SUBSYS_01C21028&REV_02\\4&378EDFA4&0&00E2"
"MediaSubType"=dword:00000001
"Name"="LAN-Verbindung"
"ShowIcon"=dword:00000000
"IpCheckingEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{A41ED87D-7219-48F7-8BE5-11257E5B80CF}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{A41ED87D-7219-48F7-8BE5-11257E5B80CF}\Connection]
"PnpInstanceID"="PCI\\VEN_8086&DEV_4222&SUBSYS_10218086&REV_02\\4&360A6DE&0&00E1"
"MediaSubType"=dword:00000002
"Name"="Drahtlose Netzwerkverbindung"
"ShowIcon"=dword:00000000
"IpCheckingEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{DD9675F8-99EB-4ED3-ADA9-F70C33A90BFB}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{DD9675F8-99EB-4ED3-ADA9-F70C33A90BFB}\Connection]
"PnpInstanceID"="ROOT\\NET\\0000"
"MediaSubType"=dword:00000001
"Name"="LAN-Verbindung 3"


Die Zeile, oder Zeilen
"ShowIcon"=dword:00000000
durch
"ShowIcon"=dword:00000001

ersetzen.

Ich will eigentlich "nur" das Icon für die Netzwerkkarte IMMER und für jeden User in der Taskleiste anzeigen lassen. (Windows XP)
Und das mit Bordmitteln, da ich nur dafür nicht extra Software kaufen und installieren möchte.
Da wir die Software mittels Symantec LiveState Delivery verteilen und Installieren, brauch ich eben die Bordmittel.
Ich hoffe es kann mir jemand helfen.

Danke schonmal
tomost
Mitglied: bastla
16.11.2007 um 21:32 Uhr
Hallo tomost und willkommen im Forum!

Ich hab hier im Forum schon ein vbs script gefunden was search and replace macht, aber damit wird meine txt Datei zerstört.
Hoffentlich meintest Du in einem anderen Forum ...

Für hier würde ich mir nämlich eher so etwas erwartet haben:
01.
'SetShowIconInRegFile.vbs 
02.
Set fso = CreateObject("Scripting.FileSystemObject") 
03.
sNewRegText = Replace(fso.OpenTextFile(WScript.Arguments(0), 1).ReadAll, _ 
04.
	"""ShowIcon""=dword:00000000", """ShowIcon""=dword:00000001") 
05.
fso.OpenTextFile(WScript.Arguments(1), 2, True).Write sNewRegText
damit bei einem Aufruf der Art
01.
cscript //nologo C:\Scripts\SetShowIconInRegFile.vbs OldRegFile.txt NewRegFile.txt
nix zerstört, sondern sogar noch etwas neu geschaffen wird.

Grüße
bastla

[Edit] Inzwischen hat ahe erklärt, wie es zur "Zerstörung" gekommen sein dürfte: Du hast versucht, unmittelbar die exportierte Datei zu verändern, ohne sie vorher in eine (ASCII/ANSI-)Textdatei zu konvertieren - damit käme auch mein obiges Script nicht zurecht, daher gibt es unten die Unicode-taugliche Variante. [/Edit]
Bitte warten ..
Mitglied: ahe
17.11.2007 um 13:47 Uhr
Hallo Bastla,

wäre es nicht wünschenswert das Ganze direkt über die Reg-Datei laufen zu lassen, ohne den Zwischenschritt über die Txt-Datei?

Ich bastel (allerdings mit wenig Erfolg) an einer Batch Lösung und mußte feststellen, dass es einige Probleme zu umschiffen gibt.

Das Problem ist, dass Reg-Dateien im Unicode Format abgespeichert werden. Durch die folgende Zeile kann man die Datei dann in ANSI umwandeln, womit dann auch diverse bordeigene Tools dann keine Probleme mehr haben (z. B. FINDSTR):
type org_export.reg >neu_export.reg

Wenn man jetzt Dein VB Script über die Datei neu_export.reg laufen läßt, dann funktioniert es, sonst kommt (bei mir) leider etwas sehr komisches heraus...

(laut http://www.administrator.de/.reg-Datei_mit_CMD_oder_VBS_auslesen.html sollte es ja mit dem Parameter True eigentlich ja gehen...)

Bei meinen Tests mittels Batch hatte ich bislang mit der Ersetzung von den Werten ein Problem:

Ich ging 'mal davon aus, dass die exportieren Regdateien für jeden Rechner unterschiedlich aussehen.

Wenn die ID's immer identisch wären, wäre es ja mit den folgenden Zeilen oder einer eigenen Reg-Datei getan:

01.
set "KEY=HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}" 
02.
 
03.
REG ADD "%KEY%\{5549A6BD-AD05-47EF-947C-E709B5981798}\Connection" /V ShowIcon /t REG_DWORD /d 1 
04.
REG ADD "%KEY%\{A41ED87D-7219-48F7-8BE5-11257E5B80CF}\Connection" /V ShowIcon /t REG_DWORD /d 1 
05.
...
Da aber vermutlich diverse unterschiedliche Netzwerkkarten mit eigenen ID's im Einsatz sind, muss man die Reg-Datei durchsuchen.

Ich weiss nicht, welche Tests schon gemacht wurden...

Falls es mit findstr versuchst wurde, muss als erstes die Reg-Datei von Unicode nach ANSI umgewandelt werden (umbenennen reicht da nicht!). Z. B. so: type network.reg >.\network2.reg
Danach bekommst man auch etwas zurück (bei mir z. B.):
01.
findstr "ShowIcon" network2.reg 
02.
 
03.
"ShowIcon"=dword:00000001 
04.
"ShowIcon"=dword:00000001 
05.
"ShowIcon"=dword:00000001 
06.
"ShowIcon"=dword:00000001 
07.
"ShowIcon"=dword:00000000
Alternativ funktioniert der Befehl find auch direkt auf Reg-Dateien.

01.
find "ShowIcon" .\network.reg 
02.
 
03.
---------- .\NETWORK.REG 
04.
"ShowIcon"=dword:00000001 
05.
"ShowIcon"=dword:00000001 
06.
"ShowIcon"=dword:00000001 
07.
"ShowIcon"=dword:00000001 
08.
"ShowIcon"=dword:00000000

Script-Idee "geklaut" von einem Deiner 'älteren' Scripts und Bibers Batch-Tut's auf Basis der ANSI-Datei:

Dabei soll die Reg-Datei zeilenweise durchgegangen werden und diese Zeilen in eine neue Datei hineingeschrieben werden. Die Ersetzung des alten Eintrags durch den neuen Eintrag soll dabei durch folgendes gemacht werden:
01.
set Line=!Line:%Von%=%Nach%!
Der gesamte Code:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=%temp%\network.reg" 
03.
set "NeueDatei=%temp%\neu_network.reg" 
04.
set "Von="ShowIcon"=dword:00000000" 
05.
set "Nach="ShowIcon"=dword:00000001" 
06.
if exist "%NeueDatei%" del "%NeueDatei%" 
07.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%NeueDatei%"
Leider funktioniert diese Lösung nicht, ich denke es liegt zum Einen an den vielen Hockkommas und zum Anderen wieder einmal an der Auswertungsreihenfolge der Parameter... (die Datei neu_network.reg wird nicht erzeugt...) oder aber an den vielen Sonderzeichen in der Reg-Datei...

mfg
Axel
Bitte warten ..
Mitglied: Biber
17.11.2007 um 15:28 Uhr
Moin ahe,

für den letzten Teil Deiner Lösungsansatzes würde ich eine andere Strategie wählen.
Zwei Batch-Eigenheiten (die bei bastla's Ansatz mit VBSkript gar nicht relevant sind) müssen berücksichtigt werden.

1. In den Reg-Dateien sind einige der LeerZEILEN erforderlich, damit es sich mit RegEdit wieder importieren lässt.
Und die FOR/F-Anweisung ignoriert (de facto) Leerzeilen und gibt von daher auch keine aus.
2. Ein anderes Problem ist gleich an zwei Stellen das Gleichheitszeichen.
Wenn Du es am CMD-Prompt testest, siehst du, dass ein Ersetzen eines Strings in einer Variable mit "Gleichheitszeichen-im-Wert"
mit der eingebauten CMD-Ersetz-Funktion Akrobatik ist, wenn nicht gar unmöglich.
01.
set varbla="Bla"=blubb 
02.
$cmd$echo Origin[%varbla%] Clone[%varbla:blubb=sülz%] 
03.
Origin["Bla"=blubb] Clone["Bla"=sülz] 
04.
## soweit okay, aber jetzt die Variante, die Du versuchst: 
05.
$cmd$echo Origin[%varbla%] Clone[%varbla:"Bla"=blubb="Bla"=sülz%] 
06.
Origin["Bla"=blubb] Clone[blubb="Bla"=sülz=blubb]
-->wie Du siehst, wird ab dem ersten =-Zeichen ersetzt....

Also würde ich (falls bastla und seine Lösungen grad nicht greifbar wären und ich irgendwas aus Batch zaubern müsste) es so machen:

01.
::---CloneReg.bat  
02.
@echo off & setlocal 
03.
If "%~1"=="" %0 network.reg 
04.
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ "%~1"') do ( 
05.
 if "%%j"=="" (echo.) ELSE (   
06.
 For /f "delims== tokens=1,2*" %%x in ("%%j") do ( 
07.
    If "%%y"=="" (echo %%x) ELSE (  
08.
    If /i "%%~x"=="ShowIcon" (echo %%x=dword:00000001) Else echo %%x=%%y 
09.
))))
Diese CloneReg.bat aufrufen mit dem dem Namen der Originaldatei (z.B. Network.reg) und, falls mir das Ergebnis auf dem Bildschirm zusagt, das ganze nochmal aufrufen und das Ergebnis umleiten in eine neue Datei.
01.
CloneReg %temp%\network.reg >>neu_network.reg.
Aber, wie Du siehst, ist eine Batch-Lösung hier im Vergleich zu VBSkript elendiglich lang.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
17.11.2007 um 17:28 Uhr
Hallo ahe!

wäre es nicht wünschenswert das Ganze direkt über die Reg-Datei laufen zu lassen, ohne den Zwischenschritt über die Txt-Datei?
Abgesehen davon, dass die Txt-Datei nicht meine Erfindung war, hast Du natürlich Recht - das macht dann aber das Script natürlich länger (besonders, wenn ich das Ergebnis auch wieder in Unicode schreibe - noch ein " ,True" mehr ):
01.
'SetShowIconInNativeRegFile.vbs 
02.
Set fso = CreateObject("Scripting.FileSystemObject") 
03.
sNewRegText = Replace(fso.OpenTextFile(WScript.Arguments(0), 1, , True).ReadAll, _ 
04.
	"""ShowIcon""=dword:00000000", """ShowIcon""=dword:00000001") 
05.
fso.OpenTextFile(WScript.Arguments(1), 2, True, True).Write sNewRegText
Grüße
bastla
Bitte warten ..
Mitglied: ahe
19.11.2007 um 09:59 Uhr
Hallo Ihr,

ich sollte mich wohl doch mehr mit VB Script befassen (seufz) ...

@Biber: Beim Herumprobieren hatte ich zwischendurch auch schon 'mal den Effekt, dass alles, was hinter dem Gleichheitszeichen war, abgetrennt war. Die erzeugte Reg-Datei sah dann doch recht seltsam aus...

Ich glaube auch, dass Bastla's Lösung der elegantere Weg ist.

@bastla: In Unicode schreiben ist ja eigentlich hier nicht notwendig (es sei denn, man hat es mit speziellen Zeichen aus dem Unicode Bereich zu tun, bei DWORD hoffentlich seltener).
Deine Lösung ist, finde ich, schön kurz und verständlich, im Gegensatz zur der "elendiglich" langen Batchlösung (sorry Biber )

Ich denke ich muss mir doch 'mal die Parameter von OpenTextFile genauer anschauen.

mfg
Axel
Bitte warten ..
Mitglied: bastla
19.11.2007 um 12:40 Uhr
@ahe
In Unicode schreiben ist ja eigentlich hier nicht notwendig
Vermutlich nicht - ich hab's vor allem zu Demozwecken verwendet, und weil ich dann mit "fc /b" Original- und bearbeitete Datei leicht vergleichen konnte.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
19.11.2007 um 12:50 Uhr
@bastla, @ahe

Schön, dass wir alle darüber gesprochen haben, aber dennoch:

@tomost aka ThreadOwner
Liest Du noch mit und möchtest Du auch mal zu Wort kommen?
Ist die Frage für Dich beantwortet oder eher zerredet?


Bitte um Feedback
Biber
Bitte warten ..
Mitglied: tomost
20.11.2007 um 09:51 Uhr
Hallo zusammen,
sorry leute, ich war bis inkl. gestern krank.
Sobald ich meine Mails durch hab werde ich mir mal alles anschauen und meinen "Senf" dazugeben.

Danke schonmal.

tomost
Bitte warten ..
Mitglied: tomost
20.11.2007 um 10:59 Uhr
Hallo Leute,
ich bin begeistert.
Mit dem script
'SetShowIconInNativeRegFile.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
sNewRegText = Replace(fso.OpenTextFile(WScript.Arguments(0), 1, , True).ReadAll, _
"""ShowIcon""=dword:00000000", """ShowIcon""=dword:00000001")
fso.OpenTextFile(WScript.Arguments(1), 2, True, True).Write sNewRegText

funktionierts perfekt.

Herzlichen Dank an alle.
Grüße
tomost
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Datum per batch ändern in Tagen (2)

Frage von crawnby zum Thema Batch & Shell ...

IDE & Editoren
gelöst IP und DNS per Batch ändern (9)

Frage von andyw5 zum Thema IDE & Editoren ...

Batch & Shell
gelöst Per Batch FTP-Server Dateien ändern (1)

Frage von Marlon1 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...