mikrocontroller.net

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


Autor: Batchcap (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

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

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

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

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:
 C:\Schnelldaten\Lightroom\Plugins
 C:\Schnelldaten\Lightroom\Templates
In ihnen ist kein Unterverzeichnis "Backup" enthalten.




Momentan sieht die *.Bat-Datei so aus:
  set srclightroompath0="C:\Schnelldaten\Lightroom\abssqas\Backup"
  set srclightroompath1="C:\Schnelldaten\Lightroom\lololo\Backup"
  set srclightroompath2="C:\Schnelldaten\Lightroom\tududeldu\Backup"
  set dstlightroompath0="D:\LocalBackup\Lightroom\abssqas\Backup"
  set dstlightroompath1="D:\LocalBackup\Lightroom\lololo\Backup"
  set dstlightroompath2="D:\LocalBackup\Lightroom\tududeldu\Backup"

  xcopy %srclightroompath0% %dstlightroompath0% /S /I /K /V
  xcopy %srclightroompath1% %dstlightroompath1% /S /I /K /V
  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

Autor: 1N 4. (1n4148)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
robocopy?

Autor: Walter K. (walter_k488)
Datum:

Bewertung
1 lesenswert
nicht 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

Autor: nocopy experte (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Batchcap (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
set srclightroompath="C:\Schnelldaten\Lightroom\"

for /d %%a in ("%srclightroompath%\*") do (
    set theFolder=%%~fa\Backups
    echo %%a
    echo %%~fa
    echo %theFolder%
    if exist %theFolder% ( echo exist! )
)
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?

Autor: td (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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%

Autor: Dirk K. (merciless)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Batchcap (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
set srclightroompath="C:\Schnelldaten\Lightroom"
set srclightroompath="D:\LocalBackup\Lightroom"

robocopy %srclightroompath% %dstlightroompath% /MIR /XD /dcopy:T /XD *Previews.lrdata /XF Temporary Import Data*

Danke! Das hat mir sehr geholfen!

Autor: Batchcap (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.