karla123
Goto Top

Brauche Hilfe bei einem Batch

Liebes Forum,

kann mir bitte wer helfen?
Folgendes Problem: Ich möchte einen bestimmten Ordner der in mehreren Unterordnen vorkommt kopieren (mit Inhalt). Es soll aber die Ordnerstruktur der übergeordneten Verzeichnisse mit kopiert werden.
Nun habe ich mir einen Batch geschrieben, dieser kopiert auch die Daten aus dem bestimmten Ordner, allerdings nur ohne Ordnerstruktur (Verzeichnisstruktur).
So sieht der Batch aus:

@echo off
set /p "name=Ordnernamen eingeben:"
if not defined name goto :eof
for /f "delims=" %%a in ('dir /ad /b /s "%name%"') do xcopy /e /s "%%a" "c:\neu"
goto :eon

Kann mir bitte jemand helfen??


LG Karla

Content-ID: 250453

Url: https://administrator.de/contentid/250453

Ausgedruckt am: 26.11.2024 um 12:11 Uhr

chaos2go
chaos2go 29.09.2014 aktualisiert um 15:07:39 Uhr
Goto Top
würde die paramter T und E mit dazu nehm d.h


er kopiert alle unterverzeichnisse egal ob leer oder ned und erstellt die ordner struktur


also xcopy source daten ziel /E /T


/E Copy folders and subfolders, including Empty folders.
May be used to modify /T.


/T Create folder structure, but do not copy files. Do not
include empty folders or subfolders.
/T /E will include empty folders and subfolders.
karla123
karla123 29.09.2014 um 15:19:36 Uhr
Goto Top
Hallo chaos2go

das habe ich auch schon versucht, nur dann werden die möglichen Unterordner in dem ausgewählten Ordner mitkopiert aber keine Daten und die übergeordnete Struktur ist auch nicht vorhanden?!
bastla
Lösung bastla 29.09.2014, aktualisiert am 01.10.2014 um 08:20:06 Uhr
Goto Top
Hallo karla123!

Unter der Annahme, dass der Laufwerksbuchstabe ausgespart werden soll, könnte das etwa so gehen:
@echo off & setlocal
set "Ziel=c:\neu"  
set /p "name=Ordnernamen eingeben: "  
if not defined name goto :eof
for /f "delims=" %%a in ('dir /ad /b /s "%name%"') do call :ProcessDir "%%~fa"  
goto :eof

:ProcessDir
for /f "tokens=1* delims=\" %%i in (%1) do set "Zielpfad=%Ziel%\%%j"  
echo xcopy /e %1 "%Zielpfad%\"  
goto :eof
Wegen des "echo" in Zeile 10 werden die Kopier-Befehle (zum Testen) nur angezeigt ...

Falls Du aus dem Laufwerksbuchstaben einen Bestandteil des Zielpfades machen möchtest, etwa so:
@echo off & setlocal
set "Ziel=c:\neu"  
set /p "name=Ordnernamen eingeben: "  
if not defined name goto :eof
for /f "delims=" %%a in ('dir /ad /b /s "%name%"') do set "Quellpfad=%%~fa" & call :ProcessDir  
goto :eof

:ProcessDir
set "Zielpfad=%Ziel%\%Quellpfad::=%"  
echo xcopy /e "%Quellpfad%" "%Zielpfad%\"  
goto :eof
Grüße
bastla
karla123
karla123 29.09.2014 um 16:10:04 Uhr
Goto Top
Hallo bastla,

das ist ja genial!!! Der erste Vorschlag funktioniert perfekt!!!!

Eine Frage zu dem zweiten Vorschlag: wie meinst du das? Das habe ich nicht verstanden.


Vielen Dank erst einmal
bastla
Lösung bastla 29.09.2014, aktualisiert am 01.10.2014 um 08:19:58 Uhr
Goto Top
Hallo karla123!
wie meinst du das?
Wenn der Quellpfad zB "D:\Test\Dein Unterordner" lautet, würde sich als Zielpfad "c:\neu\D\Test\Dein Unterordner" ergeben - der Laufwerksbuchstabe ("D") wäre als Unterordner auch im Zielpfad abgebildet (womit sicher gestellt wäre, dass es keine gleichen Zielpfade geben kann, was ansonsten in diesem Beispiel etwa mit einem zusätzlichen Quellpfad "F:\Test\Dein Unterordner" der Fall wäre) ...
Eleganter wäre übrigens bei Variante 1
set "Zielpfad=%Ziel%%~pnx1"
als Zeile 9 gewesen ...

Grüße
bastla
karla123
karla123 30.09.2014 um 13:52:32 Uhr
Goto Top
Hallo bastla,

ach so. Ist jetzt klar!

Eine Frage hätte ich doch noch: Wäre es eigentlich möglich den Namen des Root-Verzeichnisses beim Kopieren wegzulassen? Also mit dem ersten Unterordner anzufangen?

Ansonsten möchte ich mich für deine tolle Hilfe ganz herzlich bei dir bedanken!!!!


LG
Karla123
bastla
Lösung bastla 01.10.2014, aktualisiert am 02.10.2014 um 09:19:40 Uhr
Goto Top
Hallo karla123!

Freut mich, wenn's hilft ... face-smile
Wäre es eigentlich möglich den Namen des Root-Verzeichnisses beim Kopieren wegzulassen? Also mit dem ersten Unterordner anzufangen?
Da wäre dann wieder die ursprüngliche Version besser - mit
for /f "tokens=2* delims=\" %%i in (%1) do set "Zielpfad=%Ziel%\%%j"
als Zeile 9 sollte das passen (hier enthält dann %%j den Rest-String nach dem zweiten Vorkommen des Trennzeichens "\") ...

Grüße
bastla
karla123
karla123 02.10.2014 um 09:21:29 Uhr
Goto Top
Hallo bastla,

ich freue mich ja so!!! Das hat wunderbar geklappt!!!


Nochmals vielen, vielen Dank!!!!

Lieben Gruß von
Karla