Dateien mittels Batch, Script in verschiedene Ordner verschieben
Hallo in die Runde,
da ich in der Script bzw Batcherstellung Neuling bin, möchte ich mich an die erfahrenen Anwender wenden.
Folgendes Problem:
In einem Ordner habe ich Dateien, die ich per Script, bzw Batchdatei in die dazugehörigen Ordnern in einem anderen Laufwerk verschieben will. Gleichzeitig soll eine Log.Datei erstellt werden, deren Inhalt die Dateinamen anzeigt, die verschoben worden sind.
Beispiel 1:
Quelldatei: d:\\Hausverwaltung\\Köln_2008.07.01_5002723.pdf
Diese Datei soll auf Laufwerk T:\\Haus\\50027xx\\5002723\\01_Mietverträge\\014_Verwaltung\\0141_Verträge verschoben werden.
Beispiel 2:
Quelldatei: d:\\Hausverwaltung\\Düsseldorf_2008.08.15_8003841.pdf
Diese Datei soll auf Laufwerk T:\\Haus\\80038xx\\8003841\\01_Mietverträge\\014_Verwaltung\\0141_Verträge verschoben werden.
Im Voraus vielen Dank.
da ich in der Script bzw Batcherstellung Neuling bin, möchte ich mich an die erfahrenen Anwender wenden.
Folgendes Problem:
In einem Ordner habe ich Dateien, die ich per Script, bzw Batchdatei in die dazugehörigen Ordnern in einem anderen Laufwerk verschieben will. Gleichzeitig soll eine Log.Datei erstellt werden, deren Inhalt die Dateinamen anzeigt, die verschoben worden sind.
Beispiel 1:
Quelldatei: d:\\Hausverwaltung\\Köln_2008.07.01_5002723.pdf
Diese Datei soll auf Laufwerk T:\\Haus\\50027xx\\5002723\\01_Mietverträge\\014_Verwaltung\\0141_Verträge verschoben werden.
Beispiel 2:
Quelldatei: d:\\Hausverwaltung\\Düsseldorf_2008.08.15_8003841.pdf
Diese Datei soll auf Laufwerk T:\\Haus\\80038xx\\8003841\\01_Mietverträge\\014_Verwaltung\\0141_Verträge verschoben werden.
Im Voraus vielen Dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94874
Url: https://administrator.de/contentid/94874
Ausgedruckt am: 23.11.2024 um 08:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo Hausboot und willkommen im Forum!
Aus Deinen Beispielen entnehme ich, dass eigentlich nur die jeweilige Objektnummer (zB 5002723) bzw deren erste 5 Stellen als variable Bestandteile zu verwenden sind, während der Rest des Pfades als konstant betrachtet werden kann.
Wenn die Namenskonvention "Ort_Datum_Objektnummer" konsequent eingehalten wurde, könnte das etwa so gehen:
Wegen der Umlaute in den Ordnernamen musst Du entweder einen Editor, der das ASCII-Format unterstützt, oder (wie etwa hier gezeigt) die Codepage 1252 verwenden.
Grüße
bastla
Aus Deinen Beispielen entnehme ich, dass eigentlich nur die jeweilige Objektnummer (zB 5002723) bzw deren erste 5 Stellen als variable Bestandteile zu verwenden sind, während der Rest des Pfades als konstant betrachtet werden kann.
Wenn die Namenskonvention "Ort_Datum_Objektnummer" konsequent eingehalten wurde, könnte das etwa so gehen:
@echo off & setlocal
for /f "tokens=2 delims=:." %%i in ('chcp') do set "cp=%%i"
chcp 1252>nul
set "Quelle=D:\Hausverwaltung"
set "Ziel=T:\Haus"
set "ZielUnter=01_Mietverträge\014_Verwaltung\0141_Verträge verschoben"
set "Log=D:\Verträge_verschoben.log"
if exist "%Log%" del "%Log%"
for %%i in ("%Quelle%\*.pdf") do call :ProcessFile "%%~fi"
chcp %cp%>nul
goto :eof
:ProcessFile
for /f "tokens=3 delims=_" %%a in ("%~n1") do set "Obj=%%a"
set "ZielPfad=%Ziel%\%Obj:~,5%xx\%Obj%\%ZielUnter%"
if not exist "%ZielPfad%\" md "%ZielPfad%" 2>nul || (echo ## "%Zielpfad%" ist nicht vorhanden!>>"%Log%" & goto :eof)
if exist "%Zielpfad%\%~nx1" echo ## Datei %1 in "%Zielpfad%" bereits vorhanden!>>"%Log%" & goto :eof
move %1 "%Zielpfad%\" && echo %1 verschoben nach "%Zielpfad%">>"%Log%"
goto :eof
Grüße
bastla
Hallo Hausboot!
... und ist auch entsprechend im Batch umgesetzt.
Da ich davon ausgehe, dass Du diesen noch nicht wirklich getestet hast, noch ein Hinweis:
Um mit Testdaten arbeiten zu können, brauchst Du eigentlich nur in den Zeilen 5 und 6 andere Quell- bzw Zielordner anzugeben (etwa "D:\HVTest" und "T:\HausTest"), und 2 oder 3 Dateien in den Test-Quellordner zu legen.
Grüße
bastla
Der Zielpfad ist variabel.
Der variable Teil besteht in diesem Beispiel aus ...\50027xx\5002723\.... . Die Ordner davor und hahinter sind immer die Gleichen.
Dass ich das so verstanden habe, hätte eigentlich mein erster Satz ausdrücken sollen ...Der variable Teil besteht in diesem Beispiel aus ...\50027xx\5002723\.... . Die Ordner davor und hahinter sind immer die Gleichen.
... und ist auch entsprechend im Batch umgesetzt.
Da ich davon ausgehe, dass Du diesen noch nicht wirklich getestet hast, noch ein Hinweis:
Um mit Testdaten arbeiten zu können, brauchst Du eigentlich nur in den Zeilen 5 und 6 andere Quell- bzw Zielordner anzugeben (etwa "D:\HVTest" und "T:\HausTest"), und 2 oder 3 Dateien in den Test-Quellordner zu legen.
Grüße
bastla
Hallo Hausboot!
Grüße
bastla
Könntest Du die Batchdatei so abändern, dass keine Ordner erstellt werden, sondern die Dateien sofort in die entsprechenden Ordner verschoben werden?
Dieses Mal kann ich Dir tatsächlich nicht folgen: Es werden ja nur jene Ordner erstellt, in welche dann tatsächlich Dateien verschoben werden sollen, und auch das nur, soferne es diese Ordner noch nicht gibt (siehe Zeile 18) ...Grüße
bastla
Hallo Hausboot!
Diese könnte jetzt (für das konkrete Beispiel) so lauten:
Finde den ersten Unterordner von "50027xx", dessen Name mit "5002723" beginnt, und verschiebe die Datei in den Unterunterunterordner "01_Mietverträge\014_Verwaltung\0141_Verträge verschoben" des gefundenen Ordners (dieser Teil ist dann ja hoffentlich wirklich konstant).
Kommt das so hin?
Grüße
bastla
da ich keine Ahnung von Batchprogrammierung habe
Musst Du auch nicht, es genügt eine exakte Beschreibung der nötigen Vorgangsweise ...Diese könnte jetzt (für das konkrete Beispiel) so lauten:
Finde den ersten Unterordner von "50027xx", dessen Name mit "5002723" beginnt, und verschiebe die Datei in den Unterunterunterordner "01_Mietverträge\014_Verwaltung\0141_Verträge verschoben" des gefundenen Ordners (dieser Teil ist dann ja hoffentlich wirklich konstant).
Kommt das so hin?
Grüße
bastla
Hallo Hausboot!
Eine kleine Änderung zur obigen Beschreibung: Wenn es mehrere Unterordner, deren Name mit der Objektnummer ("5002723") beginnt, geben sollte, wird nicht unbedingt der (alphabetisch) Erste verwendet. Ist überhaupt davon auszugehen, dass es mehrere solcher Ordner gibt?
Der weitere Pfad ("01_Mietverträge\014_Verwaltung\0141_Verträge verschoben" ) wird jetzt auch nicht erstellt, sondern vorausgesetzt (aber natürlich vorweg geprüft).
Grüße
bastla
Kann man dies auch auf auf die anderen Dateien z.B. 80038xx\\8003841 umsetzen?
Wenn schon, denn schon ... @echo off & setlocal
for /f "tokens=2 delims=:." %%i in ('chcp') do set "cp=%%i"
chcp 1252>nul
set "Quelle=D:\Hausverwaltung"
set "Ziel=T:\Haus"
set "ZielUnter=01_Mietverträge\014_Verwaltung\0141_Verträge verschoben"
set "Log=D:\Verträge_verschoben.log"
if exist "%Log%" del "%Log%"
for %%i in ("%Quelle%\*.pdf") do call :ProcessFile "%%~fi"
chcp %cp%>nul
goto :eof
:ProcessFile
for /f "tokens=3 delims=_" %%a in ("%~n1") do set "Obj=%%a"
set Ziel2=
for /d %%v in ("%Ziel%\%Obj:~,5%xx\%Obj%*.*") do set "Ziel2=%%~fv"
if not defined Ziel2 echo ## Ein Ordner für "%Obj%" konnte nicht gefunden werden!>>"%Log%" & goto :eof
set "ZielPfad=%Ziel2%\%ZielUnter%"
if not exist "%Zielpfad%\" echo ## Der Pfad "%Zielpfad%" existiert nicht!>>"%Log%" & goto :eof
if exist "%Zielpfad%\%~nx1" echo ## Datei %1 in "%Zielpfad%" bereits vorhanden!>>"%Log%" & goto :eof
move %1 "%Zielpfad%\" && echo %1 verschoben nach "%Zielpfad%">>"%Log%"
goto :eof
Der weitere Pfad ("01_Mietverträge\014_Verwaltung\0141_Verträge verschoben" ) wird jetzt auch nicht erstellt, sondern vorausgesetzt (aber natürlich vorweg geprüft).
Grüße
bastla