Batch-Dateien und Netzlaufwerke

22.09.2010

Wer schon einmal versucht hat eine Batch (BAT oder CMD-Datei) von einem, über den UNC-Pfad geöffneten, Netzwerklaufwerk zu starten wird schnell feststellen, dass Windows sich beharrlich weigert, einen UNC-Pfad als aktuelles Arbeitsverzeichnis zu setzen. Dafür setzt Windows den Pfad gleich auf das Windows-Verzeichnis. Dieses Verhalten sorgt dafür, dass man sich gleich das denkbar schlechteste Verzeichnis mit temporärem Müll voll schreibt. Also musste eine Lösung her, welche dafür sorgt, dass das Arbeitsverzeichnis immer auf dem Verzeichnis steht, aus welchem das Script gestartet wurde. Auch wenn es sich dabei um einen UNC-Pfad handelt.

@ECHO OFF
PUSHD %~dp0

sorgt dafür, dass immer das Verzeichnis, aus welchem das Script gestartet wurde, als Arbeitsverzeichnis gesetzt wird. Wird das Script aus einem UNC-Pfad heraus gestartet, so mounted dieser Header den UNC-Pfad auf einen freien Laufwerksbuchstaben und setzt diesen als aktuellen Pfad. Hierfür wird der Parameter 0 (der volle Name des aktuellen Skriptes inkl. Pfad) ausgewertet. ~dp sorgt dafür, dass nur der Laufwerksbuchstabe und der Pfad übrig bleiben. Das klappt sogar bei UNC-Pfaden. Nach dem Ende des Skriptes (und dem Schließen des CMD-Fensters) wird die Verbindung automatisch wieder getrennt.

Möchte man die Verbindung mit dem Netzlaufwerk explizit aufheben bzw. das originale Arbeitsverzeichnis wiederherstellen, so genügt ein Aufruf von popd.