Batch - Rekursiv .reg Dateien importieren
Hi zusammen,
ich hab hier folgendes Szenario:
- Startordner (sagen wir mal: D:\Temp)
- Innerhalb des Startordners liegt die Batchdatei (Install.bat)
- Unterhalb des Startordners hab ich eine Ordnerstruktur (die sich häufiger mal ändert)
z.B (das sind jetzt nur 2 von im Moment 40 Verzeichnissen):
D:\Temp\Tools\UltraISO\.RegSettings\Windows_2008
D:\Temp\Tools\UltraISO\.RegSettings\Windows_XP
In solchen Verzeichnissen befinden sich .reg Dateien (für das jeweilige OS), die entweder "Enable<Zweck>.reg" oder "Disable<Zweck>.reg" heißen.
Pro Verzeichnis sind es meist ein Dutzend solcher Dateien.
Ich kann mit Hilfe des Kommandozeilentools xqgetosver.exe herausfinden, auf welchem OS die Install.bat ausgeführt wird und setze dementsprechend
Variablen, die das Ende des Pfades als Namen enthalten (also z.b. Win_XP, wenn Install.bat auf einem XP System gestartet wurde).
Was ich gerne möchte ist, dass die Install.bat in der Lage ist, abhängig vom verwendeten OS, rekursiv in den Verzeichnisbaum unterhalb von D:\Temp
hinabzusteigen und dann nur die .reg Dateien (per regedit /s <xyz.reg>) zu importieren, die dem verwendeten OS entsprechen, d.h. z.B. bei einem XP
System eben nur die Dateien zu beachten, die unterhalb eines ...\Win_XP Pfades liegen und dabei dann entweder die "Enable<Zweck>.reg" oder eben
die "Disable<Zweck>.reg" zu nehmen.
Im Moment war ich nur bis zu einem nichtrekursiven Aufruf gekommen, der bspw. hier alle Enable<Zweck>.reg Dateien importiert:
FOR %%f IN ("%workingdir%\Enable*") do regedit /s "%%f"
%workingdir% ist das Verzeichnis aus dem die Install.bat heraus aufgerufen wurde. Das funktioniert zumindest einwandfrei ;)
Hätte jemand einen Ansatz, wie man das Gewünschte realisieren kann?
Danke und Gruß,
Highend
ich hab hier folgendes Szenario:
- Startordner (sagen wir mal: D:\Temp)
- Innerhalb des Startordners liegt die Batchdatei (Install.bat)
- Unterhalb des Startordners hab ich eine Ordnerstruktur (die sich häufiger mal ändert)
z.B (das sind jetzt nur 2 von im Moment 40 Verzeichnissen):
D:\Temp\Tools\UltraISO\.RegSettings\Windows_2008
D:\Temp\Tools\UltraISO\.RegSettings\Windows_XP
In solchen Verzeichnissen befinden sich .reg Dateien (für das jeweilige OS), die entweder "Enable<Zweck>.reg" oder "Disable<Zweck>.reg" heißen.
Pro Verzeichnis sind es meist ein Dutzend solcher Dateien.
Ich kann mit Hilfe des Kommandozeilentools xqgetosver.exe herausfinden, auf welchem OS die Install.bat ausgeführt wird und setze dementsprechend
Variablen, die das Ende des Pfades als Namen enthalten (also z.b. Win_XP, wenn Install.bat auf einem XP System gestartet wurde).
Was ich gerne möchte ist, dass die Install.bat in der Lage ist, abhängig vom verwendeten OS, rekursiv in den Verzeichnisbaum unterhalb von D:\Temp
hinabzusteigen und dann nur die .reg Dateien (per regedit /s <xyz.reg>) zu importieren, die dem verwendeten OS entsprechen, d.h. z.B. bei einem XP
System eben nur die Dateien zu beachten, die unterhalb eines ...\Win_XP Pfades liegen und dabei dann entweder die "Enable<Zweck>.reg" oder eben
die "Disable<Zweck>.reg" zu nehmen.
Im Moment war ich nur bis zu einem nichtrekursiven Aufruf gekommen, der bspw. hier alle Enable<Zweck>.reg Dateien importiert:
FOR %%f IN ("%workingdir%\Enable*") do regedit /s "%%f"
%workingdir% ist das Verzeichnis aus dem die Install.bat heraus aufgerufen wurde. Das funktioniert zumindest einwandfrei ;)
Hätte jemand einen Ansatz, wie man das Gewünschte realisieren kann?
Danke und Gruß,
Highend
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117471
Url: https://administrator.de/contentid/117471
Ausgedruckt am: 18.12.2024 um 20:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo Highend,
du schreibst nicht wie der Name der Variable ist die deine OSVEr enthält.
Ich nehme einfach mal OSVER an.
Gruß
LotPings
du schreibst nicht wie der Name der Variable ist die deine OSVEr enthält.
Ich nehme einfach mal OSVER an.
FOR /F "delims=" %%f IN (' Dir /B /S /A-D "%workingdir%\%OSVER%\Enable*" ') do regedit /s "%%f"
Gruß
LotPings
Hallo Highend,
was in deiner Umgebung wie gesetzt ist, kannst nur du selbst überprüfen.
Entweder ist RegPath nicht oder falsch gesetzt.
Gruß
LotPings
was in deiner Umgebung wie gesetzt ist, kannst nur du selbst überprüfen.
Entweder ist RegPath nicht oder falsch gesetzt.
Gruß
LotPings
Woher stammt der Punkt im Pfad vor Regsettings\ ?
Kann ich von hier schlecht sehen,
aber probier mal vor der Schleife mit Pushd in das BBasis Verzeichnis zu wechseln und dann den dir ohne Pfad.
Ich mag Kleinbuchstaben nicht als Schleifenvariablen weil man sich schneller bei den Tilde Befehlen mal verhauen kann.
Gruß
LotPings
aber probier mal vor der Schleife mit Pushd in das BBasis Verzeichnis zu wechseln und dann den dir ohne Pfad.
PUSHD "%workingdir%\Windows_2008\"
FOR /F "delims=" %%A IN (' Dir /B /S /A-D Enable*.reg ') do echo "%%~fA"
POPD
Ich mag Kleinbuchstaben nicht als Schleifenvariablen weil man sich schneller bei den Tilde Befehlen mal verhauen kann.
Gruß
LotPings
Hier stand mal OT
Ich würde mich mal mit Junctions beschäftigen. Unter Vista und > gibt es dazu mklink
Jetzt ist der Groschen gefallen,
dann mach doch erst eine for Schleife die nur nach Ordner sucht die das Os enthalten, eine zweite gestaffelte Schleife sucht dann unterhalb nach Enable*.reg Dateien.
Gruß
LotPings
Edits
dann mach doch erst eine for Schleife die nur nach Ordner sucht die das Os enthalten, eine zweite gestaffelte Schleife sucht dann unterhalb nach Enable*.reg Dateien.
@Echo off
Set Work=D:\Temp
PUSHD "%Work%"
FOR /F "delims=" %%A IN (' Dir /B /S /AD "%RegPath%"') do (
PUSHD "%%~fA"
FOR /F "Delims=" %%B in ('Dir /B /S /A-D "Enable*.reg" ') Do Echo "%%~fB"
POPD
)
POPD
Gruß
LotPings
Edits