Vom Script_Path 4 Verzeichnisse abziehen

dinoldo

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

in einer CMD-Datei zeigt mein %Script_Path% folgenden Pfad:
C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000\03-PRJ\Daten\Prog\local\

SET Script_Path=%~dp0
REM Ergebnis soll so sein: C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000
echo %Script_Path%

Wie bekomme ich bitte von rechts gesehen 4 Verzeichnisse abgezogen, so das nur grün dargestellter Teil ausgegeben wird?

Viele Grüße,
Dino
 
Wenn \03-PRJ\[B]Daten\Prog\local\ immer gleich ist, erledigt das ein simples Suchen nach \03-PRJ\[B]Daten\Prog\local\ und Ersetzen durch `` (nichts, einfach leer lassen).

suchenersetzen.png


Oder sind die ersten vier Verzeichnisse (von rechts angefangen zu zählen) dynamisch mit unterschiedlichen Namen und Zeichenlängen, so daß der komplette Pfad z. B. auch C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000\05-HGT\Zeug\Stuff\Blumenkohl\ heißen kann? Dann brauchst du einen regulären Ausdruck.
 
Warum so umständlich? Einfach vier Ebenen hoch:

C:/Pfad/zum/tiefen/Script/irgendwo/da/unten/../../../../
 
  • Gefällt mir
Reaktionen: Raijin
RalphS schrieb:
Warum so umständlich? Einfach vier Ebenen hoch:

C:/Pfad/zum/tiefen/Script/irgendwo/da/unten/../../../../
Ganz genau. Und wenn man diesen Pfad nur als Ausgangspunkt für weitere Unterverzeichnisse benötigt, kann man so auf weitermachen:

C:/Pfad/zum/tiefen/Script/irgendwo/da/unten/../../../../ein/anderes/unterverzeichnis/von/da/unten
 
So hat es nicht funktioniert:

SET Script_Path=%~dp0..\..\..\..\
echo %Script_Path%

Wo ist hbe ich bitte Fehler gemacht?
 
Mein Script_Path ist:
C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000\03-PRJ\Daten\Prog\local\

Ausgegebn wird dies:
C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000\03-PRJ\Daten\Prog\local\/../../../../

Ich erwarte:
C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000
 
Nimm mal \ statt /. Ersteres ist der WIndows-Pfadseparator, letzteres das Linux-Pendant dazu. Und vor allem nur einer und nicht doppelt gemoppelt.

Du kannst das auf der Kommandozeile auch ausprobieren (ausgehend von c:\ )

Code:
c:\> cd windows
c:\Windows> cd ..\programme
c:\Programme> cd ..\windows\..\users
c:\Users>
 
Mit echo wird das auch nichts. Den Pfad kann man so verwenden, zb für cd oder wenn man was von dort erreichen will, aber der Text selber ändert sich natürlich nicht.
 
@andy_m4: Ich möchte das Ergrbnis weiter im Code nutzen.
@Raijin: Das hat nicht geholfen.

SET Script_Path=%~dp0..\..\..\..\
echo %Script_Path%

liefert: C:\CNC-Technik\CH-BAS01\Standards\2019\000000000000\03-PRJ\Daten\Prog\local\..\..\..\..\
 
Jep, beim echo wird stets auch das .. Zeug stehen, weil das Bestandteil des Pfads wird. ..\..\.. löscht nichts aus dem Pfad! Es sagt nur "nimm den Pfad c:\bla\blubb\eins\zwei\drei\vier\ und gehe davon 4 Verzeichnisse zurück in c:\bla\blubb" und das ganze in Kommandosprech = c:\bla\blubb\eins\zwei\drei\vier\..\..\..\..

Doch, es funktioniert! Probiere es doch wie gezeigt auf der Kommandozeile selbst aus......

*edit
.. ist im übrigen ein "normales" Verzeichnis, das auch bei dir angezeigt wird. Es ist ein Platzhalter für das übergeordnete Verzeichnis, während . der Platzhalter für das aktuelle Verzeichnis ist. Deswegen kann man ja zB auch mit xcopy c:\bla\blub\einfile.txt . eine Datei ins aktuelle Verzeichnis (.) kopieren.
 
Zurück
Oben