kayes73
Goto Top

Kopieren von Daten per bat

Hallo zusammen,

ich hoffe das meine Frage hier nicht schon hundertmal in verschiedensten Variationen gestellt wurde. Es geht um folgendes:

unter D liegt ein Verzeichnis "2015" mit vielen Unterordnern: "15001, 15002, 15003 usw"

unter E liegt auch ein Verzeichnis "2015" mit denselben Unterordnern "15001, 15002 usw." und einem zusätzlichen Unterordner Berechnungen

ich will die Daten von d:/2015/15001/* nach e:/2015/15001/Berechnungen/* kopieren. Für das gesamte übergeordnete Verzeichnis 2015.
Wie ist dies per batch möglich?

Content-Key: 275338

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

Printed on: April 24, 2024 at 06:04 o'clock

Member: holli.zimmi
holli.zimmi Jun 22, 2015 at 12:50:04 (UTC)
Goto Top
Hi,

willst Du deine Batch mit Parametern aufrufen?

Gruss

Holli
Member: reiser
reiser Jun 22, 2015 at 13:00:10 (UTC)
Goto Top
Soll die Struktur der Unterordner behalten werden??

Dann

xcopy d:/2015/15001/ e:/2015/15001/Berechnungen /s


Oder soll d:/2015/15001/* in e:/2015/15001/Berechnungen/* aber d:/2015/15002/* in e:/2015/15002/Berechnungen/* ??
Oder sollen alle Dateien im Ordner e:/2015/15001/Berechnungen/ egal aus welchem Verzeichnis aus d:/2015 sie kommen ??

Gruß reiser
Member: kayes73
kayes73 Jun 22, 2015 at 13:04:05 (UTC)
Goto Top
Zitat von @reiser:

Soll die Struktur der Unterordner behalten werden??

Dann

xcopy d:/2015/15001/ e:/2015/15001/Berechnungen /s


Oder soll d:/2015/15001/* in e:/2015/15001/Berechnungen/* aber d:/2015/15002/* in e:/2015/15002/Berechnungen/* ??

Genau, alle Daten/Ordner unterhalb 15001 soll in 15001/Berechnungen, alles unterhalb 15002 in 15002/Berechnungen, 15003 in 15003/Berechnungen usw.
Member: bastla
bastla Jun 22, 2015 updated at 15:45:26 (UTC)
Goto Top
Hallo kayes73 und willkommen im Forum!

Wenn Du eine "for /d"-Schleife verwendest, kannst Du alle Unterordner von 2015 durchgehen - also (ungetestet) in etwa:
for /d %%i in (D:\2015\*) do xcopy /e "%%i" "E:\2015\%%~nxi\Berechnungen\"
Wenn nur die mit "15" beginnenden Unterordner von "D:\2015" verarbeitet werden sollen:
for /d %%i in (D:\2015\15*) do xcopy /e "%%i" "E:\2015\%%~nxi\Berechnungen\"
und wenn nur kopiert werden soll, wenn es den entsprechenden Zielordner (etwa "E:\2015\15055") schon gibt:
for /d %%i in (D:\2015\15*) do if exist "E:\2015\%~nxi" xcopy /e "%%i" "E:\2015\%%~nxi\Berechnungen\"
Ggf könntest Du noch die "xcopy"-Optionen "/d" und "/y" (alles zusammen dann "/dey") oder bei Bedarf weitere wie "/h", "/k" und "/r" verwenden ...

Grüße
bastla
Member: kayes73
kayes73 Jun 24, 2015 at 09:13:01 (UTC)
Goto Top
Funktioniert soweit ganz gut. Leider hatte ich in den Voraussetzungen noch etwas vergessen zu erwähnen.
Der Ursprungsordner hat die Bezeichnung 2015/15001 Müller und der Zielordner den Pfad 2015/15001/Berechnungen und als 2. Beispiel der Ursprungsordner 2015/15002 Mustermann und der Zielordner den Pfad 2015/15002/Berechnungen.

Kann ich die Namen der Ursprungsordner in der Syntax quasi ausklammern?
Member: bastla
Solution bastla Jun 24, 2015, updated at Jun 30, 2015 at 11:58:07 (UTC)
Goto Top
Hallo kayes73!

Wenn sich Deine Anforderung auf "verwende als Zielordner den Teil des Quellordnernamens bis zum ersten Leerzeichen und darunter als weitere Ordnerebene 'Berechnungen'" umformulieren lässt, dann etwa so;
for /d %%i in (D:\2015\*) do for /f %%a in ("%%~nxi") do echo xcopy /e "%%i" "E:\2015\%%a\Berechnungen\"
- das "echo vor dem "xcopy" dient dem gefahrlosen Testen, da so die Kopierbefehle (mit den entsprechenden Pfaden) nur angezeigt werden. Soferne Du den Batch per Doppelklick startest, müsstest Du noch eine weitere Zeile
pause
hinzufügen, damit Du die Ausgaben auch lesen kannst (es wäre grundsätzlich während der Entwicklungsphase sinnvoll, einen Batch aus einem CMD-Fenster heraus zu starten).

Wenn das Ergebnis vernünftig aussieht, das "echo" einfach weglassen ...

Grüße
bastla
Member: kayes73
kayes73 Jun 29, 2015 at 08:05:55 (UTC)
Goto Top
Hallo!

Wenn ich das Script so nutze kopiert er mir nur den Ordner zusätzlich in den Zielpfad. Sieht also so aus:

15001
15001 Müller
15002
15002 Mustermann

Hat also nicht funktioniert.
Member: bastla
bastla Jun 29, 2015 at 14:41:54 (UTC)
Goto Top
Hallo kayes73!

Sorry - kann ich nicht nachvollziehen ...

Ein Test mit den 2 von Dir genannten Ordner-Beispielen sieht bei mir so aus:
D:\TEMP>tree D:\2015
Auflistung der Ordnerpfade für Volume TestVol
Volumenummer: 1234-5678
D:\2015
+---15001 Müller
+---15002 Mustermann

D:\TEMP>type kopieren.cmd
@echo off & setlocal
for /d %%i in (D:\2015\*) do for /f %%a in ("%%~nxi") do echo xcopy /e "%%i" "E:
\2015\%%a\Berechnungen\"

D:\TEMP>kopieren
xcopy /e "D:\2015\15001 Müller" "E:\2015\15001\Berechnungen\"
xcopy /e "D:\2015\15002 Mustermann" "E:\2015\15002\Berechnungen\"

D:\TEMP>
Grüße
bastla
Member: kayes73
kayes73 Jun 30, 2015 at 11:58:00 (UTC)
Goto Top
Tut mir leid, bastla. Du hattest natürlich recht.

Dein Skript funktioniert. Bei der Anpassung an meine Testumgebung muss ich irgendetwas falsch gemacht haben.

Vielen Dank für deine Ratschläge!!!