Ordnerstruktur durchsuchen - passenden Ordner finden und Dateien in Unterordner kopieren
Hallo,
ich habe aktuell das Problem, dass ich gerne pdf Dateien über die Aufgabenplanung per batch in einer Ordnerstruktur ablegen möchte.
Ich lege per Software pdf Dateien in einen Ordner (D:\verarbeitet\) ab.
Die pdf Dateien werden nicht direkt in diesen Ordner gelegt, sondern in Unterordner, die automatisch erzeugt und als Ordnername aus einer 4 bis 6 stelligen Nummer bestehen.
D:\verarbeitet\3764\*.pdf
D:\verarbietet\10017\*.pdf
Die pdf Dateien sollen in eine andere Ordnerstruktur (E:\Ablage\) verschoben werden.
Dort existieren Unterordner die aus einer beliebigen Bezeichnung, gefolgt von einem Unterstrich und der bereits oben erwähnten Nummer bestehen.
Besipiel
E:\Ablage\Max.Mustermann_3764\
E:\Ablage\Peter Meier_10017\
Nun sind meine Batch Kenntnisse stark eingeschränkt, sodass ich hier nun um Hilfe betteln muss.
Mehr als eine groben Ablaufplan kann ich nicht beisteuern.
- Ordner D:\verarbeitet\ mit einer for Schleife durchlaufen, sofern Ordner vorhanden, Ordnernamen in eine Variable einlesen
- Im Pfad E:\Ablage\ mit einer for Schleife jeden Ordner durchlaufen und von rechts nach links bis zum Unterstrich alle zeichen in eine Variable einlesen
- Wenn die Werte beider Variablen übereinstimmen, die Datei verschieben
- Ordner im Pfad D:\verarbeitet\ löschen
- Sonst den nächsten Ordner durchsuchen
- Fertig.
Über Antworten würde ich mich freuen.
Schöne Grüße
Alforno
ich habe aktuell das Problem, dass ich gerne pdf Dateien über die Aufgabenplanung per batch in einer Ordnerstruktur ablegen möchte.
Ich lege per Software pdf Dateien in einen Ordner (D:\verarbeitet\) ab.
Die pdf Dateien werden nicht direkt in diesen Ordner gelegt, sondern in Unterordner, die automatisch erzeugt und als Ordnername aus einer 4 bis 6 stelligen Nummer bestehen.
D:\verarbeitet\3764\*.pdf
D:\verarbietet\10017\*.pdf
Die pdf Dateien sollen in eine andere Ordnerstruktur (E:\Ablage\) verschoben werden.
Dort existieren Unterordner die aus einer beliebigen Bezeichnung, gefolgt von einem Unterstrich und der bereits oben erwähnten Nummer bestehen.
Besipiel
E:\Ablage\Max.Mustermann_3764\
E:\Ablage\Peter Meier_10017\
Nun sind meine Batch Kenntnisse stark eingeschränkt, sodass ich hier nun um Hilfe betteln muss.
Mehr als eine groben Ablaufplan kann ich nicht beisteuern.
- Ordner D:\verarbeitet\ mit einer for Schleife durchlaufen, sofern Ordner vorhanden, Ordnernamen in eine Variable einlesen
- Im Pfad E:\Ablage\ mit einer for Schleife jeden Ordner durchlaufen und von rechts nach links bis zum Unterstrich alle zeichen in eine Variable einlesen
- Wenn die Werte beider Variablen übereinstimmen, die Datei verschieben
- Ordner im Pfad D:\verarbeitet\ löschen
- Sonst den nächsten Ordner durchsuchen
- Fertig.
Über Antworten würde ich mich freuen.
Schöne Grüße
Alforno
6 Antworten
- LÖSUNG 122990 schreibt am 08.01.2016 um 00:08:54 Uhr
- LÖSUNG Alforno schreibt am 08.01.2016 um 18:09:27 Uhr
- LÖSUNG 122990 schreibt am 08.01.2016 um 18:38:49 Uhr
- LÖSUNG Alforno schreibt am 09.01.2016 um 11:28:57 Uhr
- LÖSUNG 122990 schreibt am 09.01.2016 um 12:35:01 Uhr
- LÖSUNG Alforno schreibt am 09.01.2016 um 12:46:16 Uhr
- LÖSUNG 122990 schreibt am 09.01.2016 um 12:35:01 Uhr
- LÖSUNG Alforno schreibt am 09.01.2016 um 11:28:57 Uhr
- LÖSUNG 122990 schreibt am 08.01.2016 um 18:38:49 Uhr
- LÖSUNG Alforno schreibt am 08.01.2016 um 18:09:27 Uhr
LÖSUNG 08.01.2016 um 00:08 Uhr
Moin,
solltest du hiermit hin bekommen
Gruß grexit
solltest du hiermit hin bekommen
@echo off
for /d %%a in ("D:\verarbeitet\*") DO (
for /d %%b in ("E:\Ablage\*_%%~nxa") DO (
move "%%a\*.pdf" "%%b\"
rd "%%a" /s /q
)
)
Gruß grexit
LÖSUNG 08.01.2016 um 18:09 Uhr
Moin grexit,
vielen Dank, das klappt einwandfrei.
Gerne möchte ich Dich noch um zwei Änderungen bitten.
Jeder Ordner unter E:\Ablage\ enthält Unterordner mit Jahreszahlen.
E:\Ablage\Max.Mustermann_3764\2014\
E:\Ablage\Max.Mustermann_3764\2015\
Die pdf Dateien sind immer nach folgendem Schema benannt:
2015-11-15_6476547.pdf
2014-03-20_89567523443.pdf
Besteht die Möglichkeit die Anweisung so zu erweitern, dass die pdf Datei immer in den dazugehörigen Ordner mit der gleichen Jahreszahl verschoben wird?
Der Ordner mit der Jahreszahl wird automatisch generiert, sodass dieser zum Zeitpunkt des Aufrufs der batch-Datei definitiv existiert.
Wenn das Skript unter dem Pfad "Ablage" keinen passenden Ordner mit der gleichen Nummer findet, würde ich den Ordner unter D:\verarbeitet\<Nummer>\ samt Inhalt gerne in den Ordner D:\Fehler\ verschieben.
So hätte ich eine Möglichkeit zeitnah festzustellen, welche Dateien nicht zuzuordnen waren.
Würde mich über eine Antwort freuen.
Schöne Grüße
Alforno
vielen Dank, das klappt einwandfrei.
Gerne möchte ich Dich noch um zwei Änderungen bitten.
Jeder Ordner unter E:\Ablage\ enthält Unterordner mit Jahreszahlen.
E:\Ablage\Max.Mustermann_3764\2014\
E:\Ablage\Max.Mustermann_3764\2015\
Die pdf Dateien sind immer nach folgendem Schema benannt:
2015-11-15_6476547.pdf
2014-03-20_89567523443.pdf
Besteht die Möglichkeit die Anweisung so zu erweitern, dass die pdf Datei immer in den dazugehörigen Ordner mit der gleichen Jahreszahl verschoben wird?
Der Ordner mit der Jahreszahl wird automatisch generiert, sodass dieser zum Zeitpunkt des Aufrufs der batch-Datei definitiv existiert.
Wenn das Skript unter dem Pfad "Ablage" keinen passenden Ordner mit der gleichen Nummer findet, würde ich den Ordner unter D:\verarbeitet\<Nummer>\ samt Inhalt gerne in den Ordner D:\Fehler\ verschieben.
So hätte ich eine Möglichkeit zeitnah festzustellen, welche Dateien nicht zuzuordnen waren.
Würde mich über eine Antwort freuen.
Schöne Grüße
Alforno
LÖSUNG 08.01.2016, aktualisiert 09.01.2016
Guten Abend Alforno,
deine neuen Anforderungen sollten hiermit zu realisieren sein
Gruß grexit
deine neuen Anforderungen sollten hiermit zu realisieren sein
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "ablage=E:\Ablage"
set "verarbeitet=D:\verarbeitet"
set "fehler=D:\fehler"
for /d %%a in ("%verarbeitet%\*") DO (
for /d %%b in ("%ablage%\*_%%~nxa") DO (
for %%c in ("%%a\*.pdf") DO (
set "name=%%~nc" & set "year=!name:~0,4!" & set "target=%%b\!year!"
if not exist "!target!" md "!target!" >nul
move "%%c" "!target!"
)
rd "%%a" /s /q
)
)
robocopy "%verarbeitet%" "%fehler%" /e /move >nul
if not exist "%verarbeitet%" md "%verarbeitet%" >nul
Gruß grexit
LÖSUNG 09.01.2016 um 11:28 Uhr
Moin grexit,
vielen Dank für deine Lösung.
Beim Ausführen erhalte ich in der Kommandozeile allerdings die folgenden Fehlermeldung pro Datei:
"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch."
Die Bezichnungen der Unterordner in E:\Ablage\ können leider Leerzeichen, Umlaute Punkt und Komma enthalten.
Stellt das ein Problem dar?
Der Ordner "verarbeitet" wird am Ende gelöscht.
Besteht auch die Möglichkeit das nur der Inhalt verarbeitet wird und der Ordner erhalten bleibt?
Würde mich über eine Antwort freuen.
Schöne Grüße
Alforno
vielen Dank für deine Lösung.
Beim Ausführen erhalte ich in der Kommandozeile allerdings die folgenden Fehlermeldung pro Datei:
"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch."
Die Bezichnungen der Unterordner in E:\Ablage\ können leider Leerzeichen, Umlaute Punkt und Komma enthalten.
Stellt das ein Problem dar?
Der Ordner "verarbeitet" wird am Ende gelöscht.
Besteht auch die Möglichkeit das nur der Inhalt verarbeitet wird und der Ordner erhalten bleibt?
Würde mich über eine Antwort freuen.
Schöne Grüße
Alforno
LÖSUNG 09.01.2016, aktualisiert um 12:35 Uhr
War nur ein kleiner Fehler in einer Variablenzuweisung, ist im letzten Post behoben, und die Verzeichnisse wurden zur leichteren Handhabung zusätzlich Variablen zugewiesen.
Gruß grexit
Gruß grexit
LÖSUNG 09.01.2016 um 12:46 Uhr
Funktioniert jetzt einwandfrei.
Vielen Dank für deine Mühe, das hat mir sehr weiter geholfen.
Schöne Grüße
Alforno
Vielen Dank für deine Mühe, das hat mir sehr weiter geholfen.
Schöne Grüße
Alforno