Forum: PC-Programmierung Windows *.bat: Unterverzeichnisse kopieren


von Batchcap (Gast)


Lesenswert?

Guten Morgen,

ich habe eine Handvoll Verzeichnisse, die wie folgt gestrickt sind:
1
 C:\Schnelldaten\Lightroom\abssqas\Backup\
2
 C:\Schnelldaten\Lightroom\lololo\Backup\
3
 C:\Schnelldaten\Lightroom\tududeldu\Backup\
4
 ...

und diese sollen kopiert werden in:
1
 D:\LocalBackup\Lightroom\abssqas\Backup\
2
 D:\LocalBackup\Lightroom\lololo\Backup\
3
 D:\LocalBackup\Lightroom\tududeldu\Backup\
4
 ...

Dazu gibt es allerdings im Quell-Verzeichnisbaum jede Menge Kram, den 
ich keinesfalls kopieren will, nämlich
1
 C:\Schnelldaten\Lightroom\abssqas\jedeMengeAndererKramMitbekanntenNamen\
2
 C:\Schnelldaten\Lightroom\lololo\jedeMengeAndererKramMitbekanntenNamen\
3
 C:\Schnelldaten\Lightroom\tududeldu\jedeMengeAndererKramMitbekanntenNamen\
4
 ...

Dann gibt es im Quell-Verzeichnisbaum noch Verzeichnisse, bei denen mir 
es egal ist, wenn sie mit-kopiert werden, da sie nicht viel Platz 
wegnehmen:
1
 C:\Schnelldaten\Lightroom\Plugins
2
 C:\Schnelldaten\Lightroom\Templates
In ihnen ist kein Unterverzeichnis "Backup" enthalten.




Momentan sieht die *.Bat-Datei so aus:
1
  set srclightroompath0="C:\Schnelldaten\Lightroom\abssqas\Backup"
2
  set srclightroompath1="C:\Schnelldaten\Lightroom\lololo\Backup"
3
  set srclightroompath2="C:\Schnelldaten\Lightroom\tududeldu\Backup"
4
  set dstlightroompath0="D:\LocalBackup\Lightroom\abssqas\Backup"
5
  set dstlightroompath1="D:\LocalBackup\Lightroom\lololo\Backup"
6
  set dstlightroompath2="D:\LocalBackup\Lightroom\tududeldu\Backup"
7
8
  xcopy %srclightroompath0% %dstlightroompath0% /S /I /K /V
9
  xcopy %srclightroompath1% %dstlightroompath1% /S /I /K /V
10
  xcopy %srclightroompath2% %dstlightroompath2% /S /I /K /V

Das hat den großen Nachteil, daß der Benutzer bei jedem neu erzeugten 
Unterverzeichnis auch das *.Bat-File anpassen muß - was er regelmäßig 
vergißt. Und das auch noch an drei Stellen - was eine hohe Fehlerquote 
hat.

Jetzt frage ich mich: Wie kann ich am besten eine *.bat/*.cmd aufbauen 
(Powershell ist nicht vorhanden), die mir die gewünschten Dateien 
kopiert?

Viele Grüße
Batchcap

von 1N 4. (1n4148)


Lesenswert?

robocopy?

von Walter K. (walter_k488)


Lesenswert?

du kannst neu erzeugte Unterverzeichnisse abfangen, indem Du dir 
folgenden switch von xcopy nutzt:

xcopy  c:\*.*  d:\kopie\*.*  /d:10-15-2015

kopiert nur Dateien ab 15.10.2015 und neuere


Grundsätzlich würde ich Dir aber empfehlen, mal zu prüfen ob ein anderes 
Betriebssystem mit Standard-Shells wie csh oder bash nicht auf Dauer die 
bessere Alternative wäre ... als Windows mit seinen DOS Befehlen aus den 
80ern

von nocopy experte (Gast)


Lesenswert?

Lege einfach in jedes zu kopierende Verzeichnis eine Datei

copiere-mich.info

Datei ab.


Oder lege einfach in jedes nicht zu kopierende Verzeichnis eine Datei

copiere-mich-nicht.info

Datei ab.


Dann scanne den Verzeichnisbaum mit deinem Batch ung kopiere das
richtige.

von Batchcap (Gast)


Lesenswert?

1N 4. schrieb:
> robocopy

Robocopy unterstützt keine Wildcards im Pfad außer an der letzten Stelle 
- bietet hier also keinen Vorteil gegenüber xcopy

Walter K. schrieb:
> du kannst neu erzeugte Unterverzeichnisse abfangen

Es geht nicht darum, neue Dateien auzuschließen, sondern Dateien 
auszuschließen, die nicht im Pfad */Backup/ sind.

nocopy experte schrieb:
> Dann scanne den Verzeichnisbaum mit deinem Batch ung kopiere das
> richtige.

Hm...dann könnte ich doch direkt nach einem Ordner "Backup" scannen, 
oder nicht?

Mal sehen:
1
set srclightroompath="C:\Schnelldaten\Lightroom\"
2
3
for /d %%a in ("%srclightroompath%\*") do (
4
    set theFolder=%%~fa\Backups
5
    echo %%a
6
    echo %%~fa
7
    echo %theFolder%
8
    if exist %theFolder% ( echo exist! )
9
)
Damit bekomme ich zumindest schon einmal angezeigt, in welchen Ordnern 
ein Unterordner "Backup" existiert.

Jetzt bin ich allerdings dabei überfordert, den Namen für das 
Ziel-Verzeichnis zusammenzubauen. Gibt es eine Möglichkeit, auf das 
letzte Element des aktuellen Pfades zuzugreifen?

von td (Gast)


Lesenswert?

Batchcap schrieb:
> 1N 4. schrieb:
>> robocopy
>
> Robocopy unterstützt keine Wildcards im Pfad außer an der letzten Stelle
> - bietet hier also keinen Vorteil gegenüber xcopy

Du kannst bei robocopy aber z.B. angeben:

; Verzeichnisse, die nicht mitkopiert werden sollen
set exdirs=*temp* tmp *verlauf*

; Dateien, die nicht mit kopiert werden sollen
set exfiles=*ntuser* tmp *.log*

robocopy   C:\Test  D:\Backup  /XF %exfiles% /XD %exdirs%

von Dirk K. (merciless)


Lesenswert?

Vielleicht ist ein Sync- und/oder Backup-Tool die
bessere Wahl? Aus deiner Erklärung geht nicht genau
hervor, wozu du das brauchst. Aber "Kopieren" und
"Backup" lassen darauf schließen, dass es reine Backups
sein sollen.

merciless

von Batchcap (Gast)


Lesenswert?

Ah, das ist brauchbar. In der Robocopy-Doku waren nur absolute Pfade für 
die Excludes angegeben. Daß ich hier einfach Wildcards für 
Verzeichnisnamen nutzen kann, macht die Sache sehr angenehm und sehr 
übersichtlich.

Damit reduziert sich mein Batch-File auf die folgenden, sehr einfachen 
Zeilen:
1
set srclightroompath="C:\Schnelldaten\Lightroom"
2
set srclightroompath="D:\LocalBackup\Lightroom"
3
4
robocopy %srclightroompath% %dstlightroompath% /MIR /XD /dcopy:T /XD *Previews.lrdata /XF Temporary Import Data*

Danke! Das hat mir sehr geholfen!

von Batchcap (Gast)


Lesenswert?

Dirk K. schrieb:
> Vielleicht ist ein Sync- und/oder Backup-Tool die
> bessere Wahl?

Ja, das stimmt. Die ganze Aktion hat den Zweck, die Unzulänglichkeit des 
Backup-Werkzeugs zu kompensieren: Leider lassen sich nicht die passenden 
Filter konfigurieren, um die relativ kompakten Nutzdaten im 
C:\...\Backup\ -Verzeichnis, nicht aber die temporären Daten im der 
darüberliegenden Verzeichnisstruktur zu sichern, die aus tausenden 
kleinen Dateien in hunderten Ordnern besteht. Und leider säuft das 
Backup-Tool bei vielen kleinen Dateien regelrecht ab.

Da aber an einer anderen Stelle ohnehin am Anfang des Backups eine 
Batch-Datei dafür sorgen muß, daß Subversion-Repositories "gedumpt" 
werden, ist die kleine Kopier-Aktion kein Mehraufwand, reduziert aber 
den Backup-Aufwand von 28 GB auf 2 GB.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.