preachers
Goto Top

Batch Datei erstellen. Intelligentes und effektives kopieren von Verzeichnissen und Dateien mit Keywords Win7

Hallo Zusammen,

leider bin ich kein Batch Programmierer und habe daher nur Grundlagenwissen, deshalb bin ich um jede Hilfe sehr dankbar.

Aufgabe:
Ich habe einen externen Datenträger und möchte mit dessen Hilfe Verzeichnisse und Dateien kopieren.
Best Case wäre für mich, wenn ich in der Batchdatei nicht nur den Dateityp (*.doc, *.docx, *.pdf) sondern auch
ein Keywort festlegen könnte. Sprich es werden nur Dateien und Verzeichnisse kopiert die ein Keywort enthalten.

Nachdem ich das Problem mit der Laufwerkbuchstabenerkennung gelöst hatte, habe ich schon mal angefangen.

Beta Version 1

@echo off
set odrive=%odrive:~0,2%
set backupcmd=xcopy /s /c /d /e /h /i /r /y /f /w
pause
echo keywort1
%backupcmd% "%USERPROFILE%\*keywort1.doc" "%drive%\Word\*.doc"
%backupcmd% "%USERPROFILE%\*keywort1.docx" "%drive%\Word\*.docx"
%backupcmd% "%USERPROFILE%\*keywort1.pdf" "%drive%\Word\*.pdf"
pause
echo keywort2
%backupcmd% "%USERPROFILE%\*keywort2.doc" "%drive%\Word\*.doc"
%backupcmd% "%USERPROFILE%\*keywort2.docx" "%drive%\Word\*.docx"
%backupcmd% "%USERPROFILE%\*keywort2.pdf" "%drive%\Word\*.pdf"
pause
echo keywort3
%backupcmd% "%USERPROFILE%\*keywort3.doc" "%drive%\Word\*.doc"
%backupcmd% "%USERPROFILE%\*keywort3.docx" "%drive%\Word\*.docx"
%backupcmd% "%USERPROFILE%\*keywort3.pdf" "%drive%\Word\*.pdf"
pause
exit


Herausforderungen:
1. Ich habe hier schon mal mit den Dateitypen angefangen und festgestellt, dass ich pro Keywort 3 Befehle benötige,
die wiederum nacheinander abgearbeitet werden und das sehr viel Zeit in Anspruch nimmt. Können nicht gleich
alle Endungen gleichzeitig gesucht werden?

2. Ist das Keywort am Ende des Dateinamens oder ist das Keywort mit Leerzeichen getrennt, so werden die Dateien nicht mitkopiert.

3. Wie funktioniert das Kopieren in Kombination Keywort im Ordnernamen? Wird über "dir" eine Ordnerliste mit dem Keywort erstellt und dann kopiert?
Läuft es über Variablen Setzung set Key1=2015 im Dateinamen und dann über %Key1% ab oder wird mit dem Befehl For und den Zeichen %%1 gearbeitet?

Vielen Dank für eure Unterstützung.

Content-Key: 274324

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

Printed on: April 18, 2024 at 18:04 o'clock

Member: rubberman
rubberman Jun 13, 2015 updated at 11:05:14 (UTC)
Goto Top
Hallo preachers, willkommen im Forum.

Deine Fragen laufen in der möglichen Umsetzung etwas konträr. Was soll das Endziel sein?

ROBOCOPY könnte durchaus bei der ersten Hälfte deiner Aufgabe hilfreich sein. Mehrere Filter für Dateinamen mit Wildcards (*) zu erstellen ist kein Problem. Die Frage ist, ob beim Kopieren die ursprüngliche Verzeichnisstruktur erhalten bleiben soll, oder du lediglich die gefundenen Dateien in immer das gleiche Verzeichnis kopieren willst.

Wenn du Filter für einen Teil des Pfades setzen willst, geht das nicht mehr so einfach (da du Wildcards nicht mitten in den Pfad setzen kannst). Dann bringe mal ein Beispiel, wie so etwas aussehen würde. Möglich wäre die Ausgabe des DIR Befehls per Pipe an FINDSTR zu übergeben und das Ergebnis in einer FOR /F Schleife zu verwursten. Effektiv ist das dann aber insofern nicht, da jedes Ergebnis einzeln behandelt/kopiert werden würde.

Grüße
rubberman
Member: preachers
preachers Jun 16, 2015 updated at 14:13:09 (UTC)
Goto Top
Hallo rubberman,

vielen Dank für deine Antwort.

Also Endziel soll sein, eine Datensicherung zu erstellen aber nur für Word und PDF Dateien die eben die Keywords enthalten und das ganze möglichst zügig.
Bei der oberen Datei wird eben bei jedem Key- und Dateityp fast das ganze System durchsucht und das dauert schon ziemlich lange.
Die Dateien mit ursprüngliche Verzeichnisstruktur zu kopieren wäre natürlich nice to have aber kein muss.
Leere Verzeichnisse sollten aber immer ausgeschlossen sein und ebenso gefundene Dateien NICHT gelöscht werden.

Ich dachte auch an eine Schleife, aber wie du bereits selbst sagst - ineffizient weil jedes Ergebnis einzeln behandelt/kopiert werden würde.
Wie würde den ein Befehl mit robocopy und wildcard aussehen?
Habe nur einen älteren Artikel gefunden, bei dem es nicht geht: http://www.sevenforums.com/general-discussion/223482-how-robocopy-files ...
Erkennt robocopy überhaupt den Pfad %USERPROFILE%?

Vielen Dank im Vorraus

Gruß
preachers
Member: rubberman
rubberman Jun 16, 2015 at 17:32:00 (UTC)
Goto Top
Hallo preachers.

Im einfachsten Fall würde die Kommandozeile etwa so aussehen:
robocopy "%USERPROFILE%" "%drive%\Word" "*keywort1*.doc*"  "*keywort1*.pdf"  "*keywort2*.doc*"  "*keywort2*.pdf"  "*keywort3*.doc*"  "*keywort3*.pdf" /s
Wie gesagt, ist das für Schlüsselwort im Dateiname. Wenn du Pfade nach einem Schlüsselwort filtern willst, dann nur mit Schleife.

Erkennt robocopy überhaupt den Pfad %USERPROFILE%?
Hehe, das ist eine Environmentvariable, die für jeden Prozess existiert, der in der Benutzersitzung ausgeführt wird. Ich denke du meinst, ob robocopy die Schreibweise %USERPROFILE% zum Wert auflöst: Die Antwort ist nein. Aber das ist völlig irrelevant. Der cmd.exe Prozess, in dem deine Batchdatei ausgeführt wird, tut das bereits und übergibt den expandierten Pfad an robocopy face-wink

Grüße
rubberman
Member: preachers
preachers Jun 22, 2015 at 17:47:55 (UTC)
Goto Top
Hallo rubberman,

vielen Dank für deine hilfreiche Kommandozeile die ich gleich übernommen habe.
Das durchsuchen scheint auf den ersten Blick sehr schnell zu gehen, aber das finden klappt leider nicht.
Ich habe dazu Testdateien also keyword1.doc keyword1.docx keyword1.pdf auf dem Desktop erstellt und diese wurden einfach nicht gefunden oder kopiert.

Daraufhin habe ich den Befehl mit /LOG:log.txt erweitert um der Sache auf die Schliche zu kommen.

1. Aus kurzen Pfaden z.B. C:\Users\Nutzername\Anwendungsdaten\Adobe\ wird weiter unten

C:\Users\Nutzername\AppData\Local\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Adobe\

2. Die Suche endet einfach nicht. Vermutlich auf Grund der Fehlermeldung s.u.

3. Fehlermeldung

2015/06/22 19:38:04 FEHLER 1921 (0x00000781) Quellverzeichnis wird berprft C:\Users\Nutzername\AppData\Local\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\Anwendungsdaten\
Der Dateiname konnte durch das System nicht zugeordnet werden.

30 Sekunden wird gewartet... Wiederholung...

und dann immer wieder die gleiche Fehlermeldung...

Tritt dies bei dir auch auf?
Vielen Dank schonmal im Vorraus.

Grüße
preachers
Member: rubberman
rubberman Jun 23, 2015 updated at 20:52:35 (UTC)
Goto Top
Hallo preachers.

Der Pfad sieht merkwürdig aus. Überprüfe noch mal ob alles korrekt ist (du also bspw. die Umgebungsvariale USERPROFILE nich zufällig neu definiert hast, die DRIVE Variable einen gültigen Wert hat und das Zielverzeichnis existiert). Unabhängig davon hängt Robocopy an dieser Stelle bis in alle Ewigkeit, da beim Auftreten eines Fehlers standardmäßig 1.000.000 Versuche gestartet werden, die Daten doch noch zu kopieren und das jeweils im Abstand von 30 s.
Natürlich gibt es auch dafür Optionen mit denen du beides bspw. auf 1 setzen kannst. Also hänge zusätzlich folgendes an:
/r:1 /w:1
Für mehr Informationen führe
ROBOCOPY /?
aus oder suche im Internet nach der "robocopy.doc".

Grüße
rubberman