Per Batch übergeordnetes Verzeichnis finden
Sodann will ich mal meine erste Frage hier loswerden 
Hallo Allerseits,
ich möchte eine Pfadangabe einer Datei nach dem übergeordnetem Ordnernamen auswerten.
Warum ich das brauche:
Ich habe eine Ordnerstruktur:
C:\IrgendeinPfad\Hauptordner
C:\IrgendeinPfad\Hauptordner\Ordner1
C:\IrgendeinPfad\Hauptordner\Ordner2
C:\IrgendeinPfad\Hauptordner\Ordner3
In diesen Ordnern liegen Dateien, die immer Datei.xml heissen.
Wenn ich den Hauptordner inkl. Unterordner nach *.xml Dateien durchsuche, bekomme ich eine Dateiliste wie folgt:
C:\IrgendeinPfad\Hauptordner\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner2\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner3\Datei.xml
Diese sollen in ein neues Zielverzeichnis kopiert werden, daher möchte/muss ich die Dateien umbenennen:
Pfad\Zielordner\Hauptordner.xml
Pfad\Zielordner\Ordner1.xml
Pfad\Zielordner\Ordner2.xml
Pfad\Zielordner\Ordner3.xml
Den Hauptordner übergebe ich an das Batch-Skript
Ich habe hier schon einiges "geschau_klaut"
Nur reicht mir meine bisherige Lösung nicht, da ich die xml-Datei des Hauptordners nicht erwische...
Hier mal mein Code
Schön wäre, wenn ich nicht so umständlich die Ordnernamen suchen muss, sondern einfach den String (Bsp: C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml) auswerte und alles zwischen letztem und vorletztem Backslash bekommen (in diesem Fall den String "Ordner1").
Vielen Dank schon mal an die Cracks hier...
Hallo Allerseits,
ich möchte eine Pfadangabe einer Datei nach dem übergeordnetem Ordnernamen auswerten.
Warum ich das brauche:
Ich habe eine Ordnerstruktur:
C:\IrgendeinPfad\Hauptordner
C:\IrgendeinPfad\Hauptordner\Ordner1
C:\IrgendeinPfad\Hauptordner\Ordner2
C:\IrgendeinPfad\Hauptordner\Ordner3
In diesen Ordnern liegen Dateien, die immer Datei.xml heissen.
Wenn ich den Hauptordner inkl. Unterordner nach *.xml Dateien durchsuche, bekomme ich eine Dateiliste wie folgt:
C:\IrgendeinPfad\Hauptordner\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner2\Datei.xml
C:\IrgendeinPfad\Hauptordner\Ordner3\Datei.xml
Diese sollen in ein neues Zielverzeichnis kopiert werden, daher möchte/muss ich die Dateien umbenennen:
Pfad\Zielordner\Hauptordner.xml
Pfad\Zielordner\Ordner1.xml
Pfad\Zielordner\Ordner2.xml
Pfad\Zielordner\Ordner3.xml
Den Hauptordner übergebe ich an das Batch-Skript
Ich habe hier schon einiges "geschau_klaut"
Nur reicht mir meine bisherige Lösung nicht, da ich die xml-Datei des Hauptordners nicht erwische...
Hier mal mein Code
set tempDir=C:\temp\GesammelteXMLDateien
if "%~1"=="" ( goto NODIR )
for /d %%v in ("%~1\*.*") do (
for /f "delims=" %%d in ('dir /b /od "%%v\*.plmxml" 2^>nul^') do (
copy "%%v\%%d" "%tempDir%\%%~nxv%%~xd"
)
)
Schön wäre, wenn ich nicht so umständlich die Ordnernamen suchen muss, sondern einfach den String (Bsp: C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml) auswerte und alles zwischen letztem und vorletztem Backslash bekommen (in diesem Fall den String "Ordner1").
Vielen Dank schon mal an die Cracks hier...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 110454
Url: https://administrator.de/forum/per-batch-uebergeordnetes-verzeichnis-finden-110454.html
Ausgedruckt am: 30.04.2025 um 13:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo Wenzel und willkommen im Forum!
Eigentlich ging es neulich in diesem Thread um die gleiche Problemstellung ...
Grüße
bastla
Eigentlich ging es neulich in diesem Thread um die gleiche Problemstellung ...
Grüße
bastla
Moin Wenzel,
willkommen im Forum.
Klare Anforderungen sind mir die Liebsten...
Demo zum Nachkaspern am CMD-Prompt (erste Zeile ist Eingabe, zweite Zeile Ausgabe]:
[Geht unabhängig davon, ob C:\....Datei.xml existiert oder nicht]
Abgewandelt auf einen Batch, der mit dem Parameter "C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml" [in Anführungszeichen] gerufen wird:
[ungetestet]
[Edit] Optimierung durch bastla nachgezogen[/Edit]
Grüße
Biber
willkommen im Forum.
Schön wäre, wenn ich nicht so umständlich die Ordnernamen suchen muss, sondern einfach den String (Bsp: C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml) auswerte und alles zwischen letztem und vorletztem Backslash bekommen (in diesem Fall den String "Ordner1").
Klare Anforderungen sind mir die Liebsten...
Demo zum Nachkaspern am CMD-Prompt (erste Zeile ist Eingabe, zweite Zeile Ausgabe]:
for %i in ("C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml\..") do @for %i in ("%~i") do @echo Set "ParentDir=%~ni"
Set "ParentDir=Ordner1"
Abgewandelt auf einen Batch, der mit dem Parameter "C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml" [in Anführungszeichen] gerufen wird:
@echo off & setlocal
set tempDir=C:\temp\GesammelteXMLDateien
if "%~1"=="" ( goto NODIR )
REM unoptimiert FOR %%i in ("%~1\..") do @for %%i in ("%%~i") do copy "%~1" "%tempdir%\%%~ni.XML"
FOR %%i in ("%~1\..") do @copy "%~1" "%tempdir%\%%~ni.XML"
[Edit] Optimierung durch bastla nachgezogen[/Edit]
Grüße
Biber
Moin bastla,

Okay, ich gebs zu:
reicht völlig aus...
Grüße
Biber
...aber wozu das zweite "for"?
Ich dachte, wenn ich es nicht ein bisschen aufbausche, dann merkt jede/r wie einfach das Bätschen ist... Okay, ich gebs zu:
for %i in ("C:\IrgendeinPfad\Hauptordner\Ordner1\Datei.xml\..") do @echo Set "ParentDir=%~ni"
Set "ParentDir=Ordner1"
Grüße
Biber