Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Dateien mittels Batch, Script in verschiedene Ordner verschieben

Mitglied: Hausboot

Hausboot (Level 1) - Jetzt verbinden

20.08.2008, aktualisiert 18.10.2012, 7099 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 ..
Ähnliche Inhalte
Batch & Shell
Eine Batch zum Sortieren verschiedener Dateien in Ordner
gelöst Frage von JaglagBatch & Shell16 Kommentare

Hallo, da ich leider mit Batch und shell nicht so erfahren bin hoffe das ein findiger User hier weiterhelfen ...

Batch & Shell
Batch Ordner erstellen und verschieben
gelöst Frage von FromeonlyBatch & Shell6 Kommentare

Hallo Leute, ich habe ein kleines Problem beim erstellen einer Batch. Ziel der Batch soll es sein, dass sie ...

Batch & Shell
Ordner per Batch verschieben, Datei kopieren
gelöst Frage von Shape.ShifterBatch & Shell2 Kommentare

Guten Abend :) Ich möchte mein Backup etwas anpassen und muss dafür viele Ordner verschieben und jeweils eine Datei ...

Batch & Shell
Batch: bestimmte Datei finden und den Ordner verschieben
gelöst Frage von Gari.onBatch & Shell9 Kommentare

Hallo! ich hoffe ich bin hier richtig, es geht um folgendes Problem: in einem Ordner liegen mehrere Unterordner mit ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen8 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...