Vom Script_Path 4 Verzeichnisse abziehen

dinoldo

Cadet 3rd Year
Dabei seit
Juni 2017
Beiträge
43
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
 

DeusoftheWired

Fleet Admiral
Dabei seit
Juni 2009
Beiträge
10.238
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.
 

RalphS

Lt. Commander
Dabei seit
Feb. 2015
Beiträge
1.468
Warum so umständlich? Einfach vier Ebenen hoch:

C:/Pfad/zum/tiefen/Script/irgendwo/da/unten/../../../../
 

Raijin

Fleet Admiral
Dabei seit
Nov. 2007
Beiträge
10.634
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
 

dinoldo

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Juni 2017
Beiträge
43
So hat es nicht funktioniert:

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

Wo ist hbe ich bitte Fehler gemacht?
 

dinoldo

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Juni 2017
Beiträge
43
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
 

Raijin

Fleet Admiral
Dabei seit
Nov. 2007
Beiträge
10.634
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>
 

RalphS

Lt. Commander
Dabei seit
Feb. 2015
Beiträge
1.468
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.
 

dinoldo

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Juni 2017
Beiträge
43
@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\..\..\..\..\
 

Raijin

Fleet Admiral
Dabei seit
Nov. 2007
Beiträge
10.634
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.
 
Top