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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274324
Url: https://administrator.de/forum/batch-datei-erstellen-intelligentes-und-effektives-kopieren-von-verzeichnissen-und-dateien-mit-keywords-win7-274324.html
Ausgedruckt am: 28.04.2025 um 06:04 Uhr
5 Kommentare
Neuester Kommentar
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
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
Hallo preachers.
Im einfachsten Fall würde die Kommandozeile etwa so aussehen:
Wie gesagt, ist das für Schlüsselwort im Dateiname. Wenn du Pfade nach einem Schlüsselwort filtern willst, dann nur mit Schleife.

Grüße
rubberman
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
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 Grüße
rubberman
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:
Für mehr Informationen führe
aus oder suche im Internet nach der "robocopy.doc".
Grüße
rubberman
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