CMD-Datei liefert über UNC-Pfad anderes Ergebnis

dinoldo

Cadet 4th Year
Registriert
Juni 2017
Beiträge
104
Hallo Leute,

ich nutze diese CMD-Datei in einem Prozess, um das Laufwerk, Firma, Standort und restlichen Teil des Pfades auszulesen:

Code:
@echo off

color 17

cls

REM aktueller Pfad der ausführbare Datei
SET Script_Path=%~dp0

for /f "tokens=1,2,3* delims=\" %%a in ("%~dp0") do (
    set lw=%%a
    set firma=%%b
    set standort=%%c
    set r_path=%%d
)

In meinem Beispiel bekomme ich vom Startpfad "G:\CAD-Technik\BA-AAL10\Config\MS\Standards\CAD\Tools\Extern\"
diese Ergebnisse:

lw=G:
firma=CAD-Technik
standort=BA-AAL10
r_path=Config\MS\Standards\CAD\Tools\Extern\


Soweit alles in Ordnung.

Problem: Wenn die CMD-Datei über UNC-Pfad gestartet wird, dann verschieben sich die Stellen sprich mein Ergebnis sieht in diesem Fall wie folgt aus:

lw=\\zakrpa-group.com
firma=Group
standort=CAD-Technik
r_path=BA-AAL10\Config\MS\Standards\CAD\Tools\Extern\



Was muss ich bitte in der CMD-Datei ändern, damit das Ergebnis in beiden Fällen das Gleiche liefert?


Beste Dank im Voraus!

Gruß Dino
 
ist der UNC Pfad \\zakrpa-group.com\Group\CAD-Technik\BA-AAL10\Config\MS\Standards\CAD\Tools\Extern\
bzw der Freigabename "Group" ?
 
  • Gefällt mir
Reaktionen: rg88
Ich glaube pushd dürfte da helfen (zum lösen dann noch popd)
bin mir aber nicht sicher, da ich bisher mit dem Befehl nicht arbeiten musste. schau dir einfach mal mit pushd /? und popd /? die Hilfe in einer CMD Box an
 
Indem Du die Laufwerkserkennung vorverlagerst, das nicht in der Schleife machst, und den Pfad als Basename vorher herausziehst.

Ansonsten Tipp: Nimm die Powershell, sie ist hier viel mächtiger und besser für sowas geeignet. Schau mal nach der Funktion Split-Path.
 
Sebbi schrieb:
ist der UNC Pfad \\zakrpa-group.com\Group\CAD-Technik\BA-AAL10\Config\MS\Standards\CAD\Tools\Extern\
bzw der Freigabename "Group" ?
Der UNC-Pfad ist: \\zakrpa-group.com\Group\CAD-Technik\BA-AAL10\Config\MS\Standards\CAD\Tools\Extern\
 
PHuV schrieb:
Indem Du die Laufwerkserkennung vorverlagerst, das nicht in der Schleife machst, und den Pfad als Basename vorher herausziehst.

Ansonsten Tipp: Nimm die Powershell, sie ist hier viel mächtiger und besser für sowas geeignet. Schau mal nach der Funktion Split-Path.
Wie mache ich das bitte mit Basename?

Ich würde gerne bei CMD bleiben, wenn es geht.
Ergänzung ()

PHuV schrieb:
Du kennst die Bedeutung von UNC-Pfaden? Das ist doch dann vollkommen klar, warum das bei Dir unterschiedliche Werte liefert.
Die Bedeutung von UNC-Pfaden ist mir klar. Das ist die unterschiedliche Werte erhalte, liegt es meiner Meinung nach an der Anzahl der delims oder?
 
Zuletzt bearbeitet:
dinoldo schrieb:
Wie mache ich das bitte mit Basename?

Ich würde gerne bei CMD bleiben, wenn es geht.
Die Powershell kann aber besser mit UNC umgehen.
CMD kann das leider nicht richtig, siehe https://www.shellhacks.com/cmd-does-not-support-unc-paths-as-current-directories/

Da hat Dir @catch 22 schon einen gute Tipp mit pushd/popd geliefert.

Und sorry, ich meinte Dirname, Basename ist die Datei, und das ist Unix/Linux. In Windows sind die Pendants dirname/filename
https://stackoverflow.com/questions/778135/how-do-i-get-the-equivalent-of-dirname-in-a-batch-file
dinoldo schrieb:
Die Bedeutung von UNC-Pfaden ist mir klar. Das ist die unterschiedliche Werte erhalte, liegt es meiner Meinung nach an der Anzahl der delims oder?
Richtig, UNC ist immer Hostname + Freigabe, daher hast Du hier 2 Parameter mehr, die dann alles nach hinten schieben.
 
Zuletzt bearbeitet:
catch 22 schrieb:
Ich glaube pushd dürfte da helfen (zum lösen dann noch popd)
bin mir aber nicht sicher, da ich bisher mit dem Befehl nicht arbeiten musste. schau dir einfach mal mit pushd /? und popd /? die Hilfe in einer CMD Box an
Ich habe es mir push getestet. Es liefert mir falsches Laufwerk, weil ich im Windows Explorer noch andere Laufwerke habe, die den UNC-Pfad enthalten.

Wenn mein Script_Path mit bei UNC-Pfad als Ergebnis \\... liefert, dann muss es doch möglich sein, dies mit abzufangen, oder muss ich für diesem Fall die FOR Schleife noch einmal erstellen?
 
Ich habe mich eben noch weiter mit "pushd" und "popd" beschäftigt und könnte gewünschtes Ergebnis erzielen. Vielen Dank an alle!

Code:
pushd "%~dp0"
SET Script_Path=%CD%
popd

for /f "tokens=1,2,3* delims=\" %%a in ("%Script_Path%") do (
    set lw=%%a
    set firma=%%b
    set standort=%%c
    set r_path=%%d
)

cls
 
  • Gefällt mir
Reaktionen: PHuV
Zurück
Oben