Dateien kopieren mit anderer Ordnerstruktur
Hallo und schönen Nachmittag!
Ich suche eine Batchdatei, die Dateien kopiert, und das in folgender Weise:
d:\dir01\test01\test01.txt
d:\dir01\test02\test02.txt
d:\dir01\test03\test03.txt
Die Dateien innerhalb dieser Verzeichnisse sollten nach e:\ kopiert werden, allerdings in folgende Struktur:
e:\anderesdir01\test01\subdir\test01.txt
e:\anderesdir01\test02\subdir\test02.txt
e:\anderesdir01\test02\subdir\test03.txt
Das "normale" kopieren in die gleiche Struktur wäre kein Problem, wie kann ich aber am Ziellaufwerk noch einen Unterordner "einschieben"?
Ich dachte, dass ich mit einer for Schleife arbeiten kann?
for /R "d:\dir01" %%f in (*.txt) do (
echo "%%f"
)
Leider bekomme ich den "letzen" Ordner nicht heraus!?
Ich bräuchte also die Teile "test01" und "test01.txt".
DANKE für jeden Tipp
baracuda
Ich suche eine Batchdatei, die Dateien kopiert, und das in folgender Weise:
d:\dir01\test01\test01.txt
d:\dir01\test02\test02.txt
d:\dir01\test03\test03.txt
Die Dateien innerhalb dieser Verzeichnisse sollten nach e:\ kopiert werden, allerdings in folgende Struktur:
e:\anderesdir01\test01\subdir\test01.txt
e:\anderesdir01\test02\subdir\test02.txt
e:\anderesdir01\test02\subdir\test03.txt
Das "normale" kopieren in die gleiche Struktur wäre kein Problem, wie kann ich aber am Ziellaufwerk noch einen Unterordner "einschieben"?
Ich dachte, dass ich mit einer for Schleife arbeiten kann?
for /R "d:\dir01" %%f in (*.txt) do (
echo "%%f"
)
Leider bekomme ich den "letzen" Ordner nicht heraus!?
Ich bräuchte also die Teile "test01" und "test01.txt".
DANKE für jeden Tipp
baracuda
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51587
Url: https://administrator.de/forum/dateien-kopieren-mit-anderer-ordnerstruktur-51587.html
Ausgedruckt am: 22.04.2025 um 00:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo baracuda und willkommen im Forum!
Versuch es mal so:
Damit werden alle Dateien aus der zweiten und ev darunter liegenden Verzeichnisebenen kopiert - falls so nicht gewünscht, die "xcopy"-Zeile anpassen: "/s" steht für "Kopieren auch der Unterverzeichnisse"; "*.*" ev auf "*.txt" abändern.
Grüße
bastla
Versuch es mal so:
@echo off & setlocal
set "Source=D:\Dir01"
set "Target=E:\AnderesDir01"
set "Sub=SubDir"
for /f "delims=" %%f in ('dir /b /ad %Source%\*.*') do (
for /f "delims=" %%i in ('dir /b /ad "%Source%\%%f\*.*"') do (
xcopy /s /i /y "%Source%\%%f\%%i\*.*" "%Target%\%%f\%Sub%\%%i" >nul
)
)
Grüße
bastla
Hallo baracuda!
Anscheinend habe ich zu tief "gegraben" - die zweite Schleife versucht, die Unterordner der Ordner aus der ersten Schleife zu finden - bei näherem Hinsehen liegen dort aber schon die Dateien - richtig?
Dann könnte diese zweite Schleife entfallen und das "xcopy" etwa so aussehen:
Grüße
bastla
Anscheinend habe ich zu tief "gegraben" - die zweite Schleife versucht, die Unterordner der Ordner aus der ersten Schleife zu finden - bei näherem Hinsehen liegen dort aber schon die Dateien - richtig?
Dann könnte diese zweite Schleife entfallen und das "xcopy" etwa so aussehen:
xcopy /s /i /y "%Source%\%%f\*.*" "%Target%\%Sub%\%%f" >nul
Grüße
bastla
Hallo baracuda!
Für ein Löschen nach erfolgreichem Kopieren (darum "&&") könnte das dann so aussehen:
Grüße
bastla
[Edit] Reihenfolge bei Zielverzeichnis auf "%%f\%Sub%\" lt obigem baracuda-Edit/Beispiel geändert [/Edit]
Für ein Löschen nach erfolgreichem Kopieren (darum "&&") könnte das dann so aussehen:
@echo off & setlocal
set "Source=d:\temp\vod"
set "Target=n:\temp"
set "Sub=test"
for /f "delims=" %%f in ('dir /b /ad "%Source%\*.*"') do (
xcopy /s /i /y "%Source%\%%f\*.*" "%Target%\%%f\%Sub%\" >nul && del /q "%Source%\%%f\*.*"
)
Grüße
bastla
[Edit] Reihenfolge bei Zielverzeichnis auf "%%f\%Sub%\" lt obigem baracuda-Edit/Beispiel geändert [/Edit]
Hallo baracuda!
Die Anführungszeichen selbst werden dadurch allerdings nicht in der Variable gespeichert, sondern dann im Batch gezielt für gesamte Pfade gesetzt.
In meiner letzten Variante von 11:48:04 Uhr sollten eigentlich alle nötigen Anführungszeichen vorhanden sein, so dass Du damit keine Probleme haben dürftest - oder doch?
Grüße
bastla
set "Source=d:\temp\beitraege 2005\vod"
Der Pfad steht doch schon unter Anführungszeichen?!
Negativ. Die obige "set"-Schreibweise ist ein "Biber-Special" und dient dazu, bei Bedarf sogar führende Leerstellen und ähnliches Zeugs in die Variable zu bekommen - ich verwende Sie eigentlich standardmäßig, auch wenn nicht unbedingt erforderlich.Der Pfad steht doch schon unter Anführungszeichen?!
Die Anführungszeichen selbst werden dadurch allerdings nicht in der Variable gespeichert, sondern dann im Batch gezielt für gesamte Pfade gesetzt.
In meiner letzten Variante von 11:48:04 Uhr sollten eigentlich alle nötigen Anführungszeichen vorhanden sein, so dass Du damit keine Probleme haben dürftest - oder doch?
Grüße
bastla