Windows Batch: Verzeichnisse erstellen und Dateien verschieben (Praxisanwendung)

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.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

zwanzig − sieben =