Ich hatte die Anforderung, dass automatisch erzeugte PDF-Dateien aus einem ERP-System, beginnend mit einer 5 stelligen Projektnummer und einem Unterstrich, in jeweils einen Projekt-Ordner, bestehend aus dieser 5stelligen Projektnummer, verschoben werden mussten. Nicht vorhandene Projekt-Ordner sollten dabei automatisch erzeugt werden. Klingt erstmal einfach…
String-Operationen habe ich in diesem Beitrag schon kurz angeschnitten und auch den For-Befehl in diesem Beitrag.
Für den ersten Schnellschuß erzeugte ich diese kleine Batchdatei.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
echo off CHCP 1252 set Pfad="d:\Listen\Übersicht" setlocal enabledelayedexpansion for %%i in (%Pfad%"\?????_*.*") do ( set "var=%%~nxi" if not exist %Pfad%"\!var:~0,5!" ( mkdir %Pfad%"\!var:~0,5!" ) if exist %Pfad%"\!var:~0,5!" ( move "%%i" "%Pfad%\!var:~0,5!\" ) ) |
Was passiert in diesem Skript.
Mit CHCP1252
wird das Verwenden von Umlauten ermöglicht, auch wenn sie im laufendem Skript selber nicht/falsch angezeigt werden
set Pfad
legt das Arbeitsverzeichnis fest.
Eine der wichtigeren Angaben ist hier setlocal enabledelayedexpansion
. Dieser wird benötigt, weil die set
-Angaben innerhalb einer for
-Schleife nicht korrekt funktionieren. Hier eine schöne Beschreibung.
In der for
-Schleife rufe ich nun alle Dateien auf, welche mit einem „_“ nach der 5ten Stelle bezeichnet sind.
Die Variable var
bekommt den angepassten inhalt von Variable i
(n=Dateiname, x=Extension), welche nun nicht den Pfad, sondern nur noch den kopletten Dateinamen enthält.
Danach lege ich, wenn noch nicht vorhanden, im Pfad ein Verzeichnis mit den Namen der ersten 5 Stellen des Dateinamens (der Projektnummer) an (!var:~0,5!) (Stringoperationen). Dass Hier jetzt Ausrufezeichen anstelle der Prozentzeichen genutzt werden, liegt an der oben aktivierten Funktion setlocal enabledelayedexpansion
.
Die folgende if
-Anweisung macht die gleiche prüfung wie die if
-Anweisung davor. Eigentlich hätte ich sie weg lassen können und den move
-Befehl mit in die obere Abfrage integrieren können. Sollte aber aus irgendeinem Grund das Verzeichnis nicht angelegt werden, so habe ich hier nochmal eine Kontrolle. Müsste aber nicht sein.