PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WinXP - Wo ist der Fehler? Registry Wert per Batch editieren


Scoff
2009-01-18, 01:01:22
Hallo,

ich würde gerne den Wert eines Registry Keys mithilfe eine Batchdatei editieren. D. h. die bereits enthaltenen Daten dürfen nicht überschrieben werden. Sie müssen erhalten bleiben und ich möchte noch etwas hinzufügen.
Problematisch ist das der bestehende Wert nicht auf jedem Rechner gleich ist, der hinzuzufügende hingegen schon.

Lösungsansatz war den Wert des Keys auszulesen, ihn in einer Variblen abzuspeichern und einen neue Variable definieren, die sich aus der alten Variablen und dem neuen Wert zusammensetzt.

So schaut die Batch bisher aus:


@echo off

set RegHotfixListe="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Test"
set HotFixNr=
set neu=;Wert2
set f=

for /F "delims=\ tokens=7" %%f in ('reg query "%RegHotfixListe%" /v name 2^>NUL ^|findstr "name"') do "%%f"
set HotFixNr=%f%%neu%

reg add "%RegHotfixListe%" /v name /t REG_SZ /d "%HotFixNr%" /F

pause


Problem ist halt das der bestehende Wert nicht ausgelesen, bzw. nicht in der Variablen abgespeichert wird. Find anstatt findstr hatte ich anfangs auch schon probiert. Ich habe also im Key "Test" immer nur ";Wert2" stehen und das bereits Vorhandene wurde überschrieben.

Laut Recherche sollte es eigentlich so funktionieren, macht es aber nicht. Bin ich auf dem Holzweg oder ist in dem Skript einfach nur ein kleiner Fehler?

Edit: Ahja, meine Kenntnisse in der Richtung in dieser Richtung sind doch recht eingeschränkt.

Lokadamus
2009-01-18, 05:55:51
mmm...

Einfachster Weg: Probier erstmal aus, ob du bei
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Test" |findstr "name"
überhaupt den Wert ausgelesen bekommst, den du suchst. Ich erhalte da schon keinen Wert zurück.

Mit reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" erhalte ich zwar eine Menge Angaben, aber ich hab keinen Unterschlüssel mit dem Namen Test. Benutze ich find so: |find /i "name" bekomme ich auch ein Ergebniss zurück, zumindest in dem Reg- Key, wo ich gerade teste.

Scoff
2009-01-18, 11:16:16
C:\WINDOWS>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVe
rsion\Test" |findstr "name"
name REG_SZ ;Nokia

C:\WINDOWS>


Ich habe den Schlüssel und Key natürlich extra angelegt, der existiert so unter Windows ja nicht. find /i zeigt das gleiche.
Also das auslesen klappt schon, aber das Speichern in die Variable nicht.

Scoff
2009-01-18, 16:55:52
Niemand eine Idee? (entschuldigt die Ungeduldigkeit)

MooN
2009-01-18, 17:04:26
Was willst du mit
do "%%f"
erreichen?

Wie wärs mit

for /F "delims=\ tokens=7" %%f in ('reg query "%RegHotfixListe%" /v name 2^>NUL ^|findstr "name"') do (
set HotFixNr=%%f%neu%
)

Scoff
2009-01-18, 18:08:39
So habe ich es auch schon probiert. Gleiche Problem wie schon beschrieben.
Aber ich habe die Vermutung das es an meinen XP x64 liegt. Von daher teste ich es gerade auf dem Laptop.

Edit: jetzt wird zumindestens schon mal alles richtig ausgelesen und auch in der Variablen abgespeichert. Problem jetzt ist allerdings das im Wert Leerzeichen vorkommen, und damit alles danach nicht mehr beachtet wird.


@echo off

for /f "tokens=3" %%f in ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "ExcludeProfileDirs" ^|find "ExcludeProfileDirs"') do set "Value=%%f"
echo Wert derzeit: "%Value%"
set HotFixNr=%Value%;Nokia
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ExcludeProfileDirs /t REG_SZ /d "%HotFixNr%" /F

pause

MooN (@work)
2009-01-20, 13:38:22
Ab welcher Stelle tritt dein Problem auf?
Steht in %Value% noch der komplette Wert (inkl. Leerzeichen drin) oder fehlt bereits dort etwas? Oder wird (bei obigem Code) nicht der Inhalt von %HotFixNr%, sondern die Variable selbst eingetragen?

Gast
2009-01-20, 14:42:50
Ich kann das gerade leider nicht komplett nachstellen, die for Schleife muckt hier.
Aber eventuell gehts so:

@echo off

for /f "tokens=3" %%f in ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "ExcludeProfileDirs" ^|find "ExcludeProfileDirs"') do set "Value=%%f"
echo Wert derzeit: "%Value%"
set HotFixNr="%Value%;Nokia"
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ExcludeProfileDirs /t REG_SZ /d %HotFixNr% /F

pause

Scoff
2009-01-20, 17:35:42
Ab welcher Stelle tritt dein Problem auf?
Steht in %Value% noch der komplette Wert (inkl. Leerzeichen drin) oder fehlt bereits dort etwas? Oder wird (bei obigem Code) nicht der Inhalt von %HotFixNr%, sondern die Variable selbst eingetragen?

Bei echo Wert derzeit: "%Value%" wird schon nur der Inhalt bis zum ersten leerzeichen angezeigt.

Ich kann das gerade leider nicht komplett nachstellen, die for Schleife muckt hier.
Aber eventuell gehts so:


Das Setzen der Anführunsstriche hatte ich auch schon ohne Erfolg probiert

MooN
2009-01-20, 22:25:29
"Fehler" gefunden..
Nachdem ich das zu Hause nachstellen konnte. Eigentlich hat jeder, der diesen Thread gelesen hat, ein Schild verdient.

Als Trennzeichen für die Tokens wird standardmäßig ein Leerzeichen oder Tabstopp gesehen. Du brauchst also nichts weiter, als alle Token ab dem 3.
Da du aber nur das 3. ausgeben lässt, kriegst du auch nur den Inhalt bis zur ersten Leerstelle.

Ich geh mir n Schild holen.. :usad:


@echo off

for /f "tokens=3,*" %%f in ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v "Device" ^|find "Device"') do set "Value=%%f %%g"
echo Wert derzeit: "%Value%"
set HotFixNr=%Value%;Nokia
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ExcludeProfileDirs /t REG_SZ /d "%HotFixNr%" /F

pause

Scoff
2009-01-21, 17:10:10
"Fehler" gefunden..
Nachdem ich das zu Hause nachstellen konnte. Eigentlich hat jeder, der diesen Thread gelesen hat, ein Schild verdient.

Als Trennzeichen für die Tokens wird standardmäßig ein Leerzeichen oder Tabstopp gesehen. Du brauchst also nichts weiter, als alle Token ab dem 3.
Da du aber nur das 3. ausgeben lässt, kriegst du auch nur den Inhalt bis zur ersten Leerstelle.

Ich geh mir n Schild holen.. :usad:


@echo off

for /f "tokens=3,*" %%f in ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v "Device" ^|find "Device"') do set "Value=%%f %%g"
echo Wert derzeit: "%Value%"
set HotFixNr=%Value%;Nokia
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ExcludeProfileDirs /t REG_SZ /d "%HotFixNr%" /F

pause


Vielen Dank. Ich hatte es schon mit tokens=3* probiert, was natürlich nicht half. Werd mir wohl noch ein paar mal die Doku zu for usw. durchlesen müssen.