Vom Script_Path 4 Verzeichnisse abziehen

dinoldo

Cadet 4th Year
Dabei seit
Juni 2017
Beiträge
91
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
13.511
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.
 
R

RalphS

Gast
Warum so umständlich? Einfach vier Ebenen hoch:

C:/Pfad/zum/tiefen/Script/irgendwo/da/unten/../../../../
 
  • Gefällt mir
Reaktionen: Raijin

Raijin

Fleet Admiral
Dabei seit
Nov. 2007
Beiträge
16.234
Zitat von RalphS:
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 4th Year
Ersteller dieses Themas
Dabei seit
Juni 2017
Beiträge
91
So hat es nicht funktioniert:

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

Wo ist hbe ich bitte Fehler gemacht?
 

dinoldo

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Juni 2017
Beiträge
91
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
16.234
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>
 
R

RalphS

Gast
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 4th Year
Ersteller dieses Themas
Dabei seit
Juni 2017
Beiträge
91
@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
16.234
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