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

Batch - Rekursiv .reg Dateien importieren

Frage Entwicklung Batch & Shell

Mitglied: Highend01

Highend01 (Level 1) - Jetzt verbinden

04.06.2009, aktualisiert 17:28 Uhr, 6107 Aufrufe, 11 Kommentare

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
Mitglied: LotPings
04.06.2009 um 14:28 Uhr
Zitat von Highend01:
Hallo Highend,
du schreibst nicht wie der Name der Variable ist die deine OSVEr enthält.
Ich nehme einfach mal OSVER an.
01.
FOR /F "delims=" %%f IN (' Dir /B /S /A-D "%workingdir%\%OSVER%\Enable*" ') do regedit /s "%%f"
Gruß
LotPings
Bitte warten ..
Mitglied: Highend01
04.06.2009 um 14:54 Uhr
Hallo LotPings,

die eigentliche Variable heißt RegPath.

Sie wird am Anfang des Scripts abgeleitet:

01.
"%XQGetOSVer%" /B /N 
02.
... 
03.
IF %ERRORLEVEL%==10 SET OSVer=Windows 2008 Server 
04.
... 
05.
IF "%OSVer%"=="Windows 2008 Server" SET RegPath=Windows_2008
Wenn ich diese jetzt in die Zeile einsetze und das script probehalber mit einem veränderten Aufruf
01.
FOR /F "delims=" %%f IN (' Dir /B /S /A-D "%workingdir%\%RegPath%\Enable*" ') do echo "%%f"
durchlaufen lasse, bekomme ich allerdings auch .reg Dateien gelistet, die nicht im Windows_2008 Verzeichnis liegen.

01.
"D:\Temp\UltraISO\.RegSettings\Windows_2008\Enable [Extensions (Install)].reg" 
02.
"D:\Temp\UltraISO\.RegSettings\Windows_2008\Enable [Settings (Install)].reg" 
03.
"D:\Temp\UltraISO\.RegSettings\Windows_7\Enable [Extensions (Install)].reg" 
04.
"D:\Temp\UltraISO\.RegSettings\Windows_7\Enable [Settings (Install)].reg" 
05.
"D:\Temp\VLC\.RegSettings\Windows_2008\Enable [Extensions (Install)].reg"
Siehe die Dateien, die im Windows_7 Verzeichnis liegen.

Gruß,
Highend
Bitte warten ..
Mitglied: LotPings
04.06.2009 um 16:25 Uhr
Hallo Highend,
was in deiner Umgebung wie gesetzt ist, kannst nur du selbst überprüfen.

Entweder ist RegPath nicht oder falsch gesetzt.

Gruß
LotPings
Bitte warten ..
Mitglied: 78632
04.06.2009 um 16:36 Uhr
Woher stammt der Punkt im Pfad vor Regsettings\ ?
Bitte warten ..
Mitglied: Highend01
04.06.2009 um 17:23 Uhr
Hi LotPings,

mh, du hattest Recht, die Variable RegPath war falsch gesetzt. Keine Ahnung, warum das der Fall war.

Setze ich das rein demonstrativ mal manuell auf Windows_2008

01.
FOR /F "delims=" %%f IN (' Dir /B /S /A-D "%workingdir%\Windows_2008\Enable*" ') do echo "%%f"
Dann werden gar keine .reg Dateien mehr gefunden ("Das System kann die angegebene Datei nicht finden.").

Versteh ich das falsch oder liegt es daran, dass wirklich nur in dem Verzeichnis (wie im Beispiel) D:\Temp\Windows_2008
alle Enable* Dateien gesucht werden? Falls ja entspricht das ja nicht dem Aufbau der Ordnerstruktur, weil diese OS-benannten
Verzeichnisse ja erst tiefer im Verzeichnisbaum auftreten.


@78632

Die Verzeichnisse "heißen" wirklich so (mit führendem Punkt).

Gruß,
Highend
Bitte warten ..
Mitglied: LotPings
04.06.2009 um 17:32 Uhr
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.
01.
PUSHD "%workingdir%\Windows_2008\" 
02.
FOR /F "delims=" %%A IN (' Dir /B /S /A-D Enable*.reg  ') do echo "%%~fA" 
03.
POPD
Ich mag Kleinbuchstaben nicht als Schleifenvariablen weil man sich schneller bei den Tilde Befehlen mal verhauen kann.

Gruß
LotPings
Bitte warten ..
Mitglied: 78632
04.06.2009 um 17:37 Uhr
Hier stand mal OT
Bitte warten ..
Mitglied: Highend01
04.06.2009 um 17:44 Uhr
Das Verzeichnis "%workingdir%\Windows_2008\" existiert ja gar nicht, von daher wird das Wechseln schwierig *g*

Das nach dem laufenden OS benannte jeweilige Verzeichnise (Windows_2008 | Windows_XP, Windows_7, usw. usf.) existiert bei der jetzigen Anordnung _nicht direkt_ unterhalb des Basisverzeichnisses (D:\Temp), sondern taucht erst später (in weiteren Unterordnern) auf.

D:\Temp\Tools\UltraISO\.RegSettings\Windows_2008
oder auch
D:\Temp\Tools\VLC\.RegSettings\Windows_2008

(je nach Tool/Anwendung halt).

Das was du jetzt vorgeschlagen hast, würde implizieren, die Ordnerstruktur umzubauen im Stile von:

D:\Temp\Windows_2008\UltraISO\.Regsettings
D:\Temp\Windows_2008\VLC\.Regsettings

Das würde ich gerne vermeiden, da ich sonst für jedes OS das jeweilige Toolverzeichnis duplizieren müsste.

D:\Temp\Windows_XP\UltraISO\.Regsettings
D:\Temp\Windows_XP\VLC\.Regsettings

Gruß,
Highend
Bitte warten ..
Mitglied: 78632
04.06.2009 um 17:51 Uhr
Ich würde mich mal mit Junctions beschäftigen. Unter Vista und > gibt es dazu mklink
Bitte warten ..
Mitglied: LotPings
04.06.2009 um 18:06 Uhr
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.

01.
@Echo off 
02.
Set Work=D:\Temp 
03.
PUSHD "%Work%" 
04.
FOR /F "delims=" %%A IN (' Dir /B /S /AD "%RegPath%"') do ( 
05.
  PUSHD "%%~fA" 
06.
 FOR /F "Delims=" %%B in ('Dir /B /S /A-D "Enable*.reg" ') Do Echo "%%~fB" 
07.
 POPD   
08.
09.
POPD
Gruß
LotPings

Edits
Bitte warten ..
Mitglied: Highend01
04.06.2009 um 19:14 Uhr
*Cheer*

Ja, LotPings, das ist exakt das, was ich benötigt hatte

Ursprünglich sollte es auch noch eine Unterstützung für Betriebssysteme <= Win 98(se) geben, aber den Zopf kann man mittlerweile abschneiden, so dass dort das Nichtvorhandensein von pushd / popd nicht ins Gewicht fällt.

Vielen lieben Dank!

Gruß,
Highend
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch die alle Dateien löscht die Älter als 3 Tage sind (5)

Frage von Azubine zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

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

Frage von Marlon1 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...