Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateien mittels Batch, Script in verschiedene Ordner verschieben

Frage Entwicklung Batch & Shell

Mitglied: Hausboot

Hausboot (Level 1) - Jetzt verbinden

20.08.2008, aktualisiert 18.10.2012, 7013 Aufrufe, 12 Kommentare

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.
Mitglied: bastla
20.08.2008, aktualisiert 18.10.2012
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:
01.
@echo off & setlocal 
02.
for /f "tokens=2 delims=:." %%i in ('chcp') do set "cp=%%i" 
03.
chcp 1252>nul 
04.
 
05.
set "Quelle=D:\Hausverwaltung" 
06.
set "Ziel=T:\Haus" 
07.
set "ZielUnter=01_Mietverträge\014_Verwaltung\0141_Verträge verschoben" 
08.
set "Log=D:\Verträge_verschoben.log" 
09.
 
10.
if exist "%Log%" del "%Log%" 
11.
for %%i in ("%Quelle%\*.pdf") do call :ProcessFile "%%~fi" 
12.
chcp %cp%>nul 
13.
goto :eof 
14.
 
15.
:ProcessFile 
16.
for /f "tokens=3 delims=_" %%a in ("%~n1") do set "Obj=%%a" 
17.
set "ZielPfad=%Ziel%\%Obj:~,5%xx\%Obj%\%ZielUnter%" 
18.
if not exist "%ZielPfad%\" md "%ZielPfad%" 2>nul || (echo ## "%Zielpfad%" ist nicht vorhanden!>>"%Log%" & goto :eof) 
19.
if exist "%Zielpfad%\%~nx1" echo ## Datei %1 in "%Zielpfad%" bereits vorhanden!>>"%Log%" & goto :eof 
20.
move %1 "%Zielpfad%\" && echo %1 verschoben nach "%Zielpfad%">>"%Log%" 
21.
goto :eof
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
Bitte warten ..
Mitglied: Hausboot
21.08.2008 um 09:41 Uhr
Guten Morgen Bastla,

vielen Dank für die schnelle Antwort.
Der Lösungsansatz entspricht nicht ganz dessen, was ich mir vorgestellt hatte.
Der Zielpfad ist variabel.
>>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.<<
Der variable Teil besteht in diesem Beispiel aus ...\50027xx\5002723\.... . Die Ordner davor und hahinter sind immer die Gleichen.

Grüße
Hausboot
Bitte warten ..
Mitglied: bastla
21.08.2008 um 10:47 Uhr
Hallo Hausboot!

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 ...

... 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
Bitte warten ..
Mitglied: Hausboot
21.08.2008 um 21:24 Uhr
Hallo Bastla,

ich hatte beim Testen keine pdf-Datei ausgewählt. Mein Fehler. Es funktioniert jetzt einwandfrei.
Ich habe jedoch nich eine Bitte.
Könntest Du die Batchdatei so abändern, dass keine Ordner erstellt werden, sondern die Dateien sofort in die entsprechenden Ordner verschoben werden? Die Log-Datei soll erstellt werden.
Nochmals vielen Dank für die schnellen Antworten.

Grüße
Hausboot
Bitte warten ..
Mitglied: bastla
21.08.2008 um 21:33 Uhr
Hallo Hausboot!

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
Bitte warten ..
Mitglied: Hausboot
21.08.2008 um 22:24 Uhr
Hallo Bastla,

mein Problem ist, dass bei diesem Beispiel, der Ordner >>5002723 - Mietobjekt 10 - AK1000<< heißen kann.
Die Bezeichnugnen ändern sich im dritten Unterordner.
T:\Haus\50027xx\5002723 - Mietobjekt 10 - AK1000\01_Mietverträge\014_Verwaltung\0141_Verträge verschoben werden.<<
Da die Namen unterschiedlich sind, dachte ich, dass die zu verschiebende Datei direkt in den vorgesehenen Ordner verschoben werden kann.
Danke für deine Geduld

Grüße
Hausboot
Bitte warten ..
Mitglied: bastla
21.08.2008 um 22:32 Uhr
Hallo Hausboot!

Da die Namen unterschiedlich sind, dachte ich, dass die zu verschiebende Datei direkt in den vorgesehenen Ordner verschoben werden kann.
Wie soll denn festgestellt werden, welches der "vorgesehene" Ordner ist, wenn es keine einheitlichen Namenskonventionen gibt?

Grüße
bastla
Bitte warten ..
Mitglied: Hausboot
21.08.2008 um 22:50 Uhr
Hallo Bastla,

da ich keine Ahnung von Batchprogrammierung habe, hatte ich mir gedacht, dass durch Wildcards (falls sowas möglich ist) die Zusätze - Mietobjekt 10 - AK1000 zu ersetzen sind. Die Ziffernfolge 5002723 ergibt sich aus z.B. Köln_2008.07.01_5002723.pdf.
Kann man es eventuell so realisieren?

Grüße

Hausboot
Bitte warten ..
Mitglied: bastla
21.08.2008 um 22:55 Uhr
Hallo Hausboot!

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
Bitte warten ..
Mitglied: Hausboot
21.08.2008 um 23:02 Uhr
Hallo Bastla,

deine Beschreibung ist korrekt.
Kann man dies auch auf auf die anderen Dateien z.B. 80038xx\\8003841 umsetzen?

Grüße

Hausboot
Bitte warten ..
Mitglied: bastla
21.08.2008 um 23:24 Uhr
Hallo Hausboot!

Kann man dies auch auf auf die anderen Dateien z.B. 80038xx\\8003841 umsetzen?
Wenn schon, denn schon ...
01.
@echo off & setlocal 
02.
for /f "tokens=2 delims=:." %%i in ('chcp') do set "cp=%%i" 
03.
chcp 1252>nul 
04.
 
05.
set "Quelle=D:\Hausverwaltung" 
06.
set "Ziel=T:\Haus" 
07.
set "ZielUnter=01_Mietverträge\014_Verwaltung\0141_Verträge verschoben" 
08.
set "Log=D:\Verträge_verschoben.log" 
09.
 
10.
if exist "%Log%" del "%Log%" 
11.
for %%i in ("%Quelle%\*.pdf") do call :ProcessFile "%%~fi" 
12.
chcp %cp%>nul 
13.
goto :eof 
14.
 
15.
:ProcessFile 
16.
for /f "tokens=3 delims=_" %%a in ("%~n1") do set "Obj=%%a" 
17.
set Ziel2= 
18.
for /d %%v in ("%Ziel%\%Obj:~,5%xx\%Obj%*.*") do set "Ziel2=%%~fv" 
19.
if not defined Ziel2 echo ## Ein Ordner für "%Obj%" konnte nicht gefunden werden!>>"%Log%" & goto :eof 
20.
set "ZielPfad=%Ziel2%\%ZielUnter%" 
21.
if not exist "%Zielpfad%\" echo ## Der Pfad "%Zielpfad%" existiert nicht!>>"%Log%" & goto :eof 
22.
if exist "%Zielpfad%\%~nx1" echo ## Datei %1 in "%Zielpfad%" bereits vorhanden!>>"%Log%" & goto :eof 
23.
move %1 "%Zielpfad%\" && echo %1 verschoben nach "%Zielpfad%">>"%Log%" 
24.
goto :eof
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
Bitte warten ..
Mitglied: Hausboot
21.08.2008 um 23:37 Uhr
Hallo Bastla,

ich möchte mich recht herzlich bei Dir bedanken. Es funktioniert jetzt wunderbar.

Ich wünsche Dir eine gute Nacht.

Viele Grüße

Hausboot
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...