bithunter

Pfad-String Zerlegen

Moin,


Mein Problem besteht darin, dass ich eine String-Eingabe, welche mit set /p in eine variable abgespeichert wird, zerlegen muss.
Das wäre kein Problem wenn die Eingabe immer die gleiche Struktur hätte, jedoch kann sie immer unterschiedlich sein


z.B.

Eingabe1:
"C:\Temp\Example 2\Setups\Test.exe"

Eingabe2:
"U:\Ordner1\Unterordner2\Unterordner 3\Version1.0\Setups\Test3.exe"

(Der Eingabe-String endet jedoch immer mit "....exe" und die Datei befindet sich immer im "Setups" Ordner)

Als Ergebnis bräuchte ich den Pfad des Ordners worin sich die exe befindet,den Pfad des Überordners worin sich der Ordner der exe befindet und der name der Datei mit Endung für ein weiteren Batch

z.B.
"C:\Temp\" "C:\Temp\Example 2\Setups\" "Test.exe"


MfG bithunter
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 164210

Url: https://administrator.de/forum/pfad-string-zerlegen-164210.html

Ausgedruckt am: 20.05.2025 um 04:05 Uhr

bastla
bastla 08.04.2011 um 10:38:18 Uhr
Goto Top
Hallo bithunter und willkommen im Forum!

Unter "for /?" findest Du (ziemlich gegen Ende) die Möglichkeiten zur Zerlegung - für den "Überordner" könntest Du etwa so vorgehen:
for %%i in ("%Pfad%\..") do echo %%~dpi  
Annahme dabei: Die Eingabe enthält keine (umschließenden) Anführungszeichen ...

Grüße
bastla
bithunter
bithunter 08.04.2011 um 10:53:40 Uhr
Goto Top
Vielen Dank,


Mit :
for %%a in (%name%) do set pfad=%%~dpa
for %%i in (%name%) do set datei=%%~nxi

kann ich nun den Pfad des Ordners und der Name der Datei herausfinden jedoch nicht den "Überordner"

Die Test-batch:

@echo off
Title Test
echo Pfad eingeben
set /p name=
for %%a in (%name%) do set pfad="%%~dpa"
for %%i in (%name%) do set datei="%%~nxi"
echo %pfad%
echo %datei%
pause

Ausgabe:
C:\Temp\Example 2\Setups\
Test.exe


Edit:
Da der Überordner immer "setups" heißt, habe ich den Pfad-String um 7 Stellen verkürz und kriege somit den gewünschten Effekt

set pfad2="%pfad:~0,-7%"

Ich wäre jedoch dankbar wenn jemand einen Tip für eine flexiblere Lösung hätte.
60730
60730 08.04.2011 um 11:08:18 Uhr
Goto Top
moin,

Die Test-batch:
@echo off

@Biber ich will einen eigenen Counter.....ja ich weiß - selber zählen...

for /f "tokens=1-3 delims=\" %a in ("%pfad%") do echo %a-%b-%c

btw: Bitte nutze doch die Code Blöcke.

Grüße
bithunter
bithunter 08.04.2011 um 11:15:19 Uhr
Goto Top
Zitat von @60730:
> for /f "tokens=1-3 delims=\" %a in ("%pfad%") do echo %a-%b-%c

Grüße


Wie gesagt, die Struktur ist sehr variabel(die Datei könnte in 10-15 Unterordner versteckt sein), d.h. die Anzahl der Tokens variirt mit der Anzahl der vorhanden Backslashes im String, die Backslashes müssten aber vorher im String gezählt werden
Biber
Biber 08.04.2011 um 11:47:26 Uhr
Goto Top
Moin bithunter,

willkommen im Forum.

Mach da nicht so'n Heckmeck drum, sondern lieber ein paar Codetags.
Heut' ist Freitag und wir essen zeitig.

Beispiel am CMD-Prompt für Anzeige Überordner [führendes ">" gehört zu meinem Prompt; nicht mit eingeben]:
>set "fullfname=y:\Eigene Dateien\Altova Projects\Spelling\Lexicons\custom.tlx"

>for %i in ("%fullfName%") do @for %j in ("%~dpi\..\.") do @echo ParentDir:[%~dpj] Dir:[%~dpi] File:[%~nxi]
ParentDir:[y:\Eigene Dateien\Altova Projects\] Dir:[y:\Eigene Dateien\Altova Projects\Spelling\Lexicons\] File:[custom.tlx]

Grüße
Biber
bithunter
bithunter 08.04.2011 um 12:05:27 Uhr
Goto Top
Vielen Dank!

Damit funktioniert es einwandfrei und ist klomplett variabel.
bastla
bastla 08.04.2011 um 12:12:10 Uhr
Goto Top
@Biber
... wobei der Schlenker mit "\." am Ende ja reine Verzierung (Nährwert nicht feststellbar) ist ...
den Pfad des Überordners worin sich der Ordner der exe befindet
hast wenigstens Du richtig interpretiert (also nicht wörtlich genommen) - für mich wäre das in Deinem Beispiel "y:\Eigene Dateien\Altova Projects\Spelling\" gewesen ...

Grüße
bastla
Biber
Biber 08.04.2011 um 12:58:27 Uhr
Goto Top
Moin bastla,

stimmt, ich wollte (und bin) auf den Über-Überordner gesprungen.
Ein Ordner darunter (falls der gemeint gewesen sein sollte) wäre ja noch einfacher:
>for %i in ("%fullfName%") do @for %j in ("%~dpi\.") do @echo ParentDir:[%~dpj] Dir:[%~dpi] File:[%~nxi]
ParentDir:[y:\Eigene Dateien\Altova Projects\Spelling\] Dir:[y:\Eigene Dateien\Altova Projects\Spelling\Lexicons\] File:[custom.tlx]

Zusammenfassend.
a) works as designed face-wink
b) mit dem zeitigen Essen könnte es noch klappen.

@bitchhunter
Haken dran und gut is'.

Grüße
Biber
bithunter
bithunter 08.04.2011 um 13:09:36 Uhr
Goto Top
Zitat von @Biber:
@bitchhunter
na das ist mit Sicherheit nicht mein Nickname


Falls es noch jemand mal gebrauchen könnte, hier mein Endergebnis:

for %%l in (%archiv%) do @for %%m in ("%%~dpl\.") do set dirup2=%%~dpm & set dir2=%%~dpl & set name=%%~nxl
set dir=%dir2:~0,-1%
set dirup=%dirup2:~0,-1%
set name2=%name:~0,-4%

Das Kürzen der String's ist notwendig, um die Leerzeichen zu löschen, welche automatisch am Ende der Verzeichnissstring's erstellt werden.
Skyemugen
Skyemugen 08.04.2011 um 13:10:07 Uhr
Goto Top
Aloha Biber,
[OT]
also nein, nein, wie heißt denn bei dir der TE? Was du wohl da wieder im Sinn hattest. *fg* face-smile
[/OT]
greetz André
Biber
Biber 08.04.2011 um 13:58:48 Uhr
Goto Top
[OT]
@Skyemugen
oh f*ck.... da war ich schon mit einem Bein im WE....
... und jetzt stattdessen mit einem Bein im Fegefeuer...

Das liegt bestimmt nur an diesem ver###ten Umgangston, den meine ver###ten ###-Arbeitskollegen immer pflegen.
Da, denen werd ich mal die ###te ### in den ###, aber so richtig.

@bithunter
Öhmm ...sorry....

Die Kürzerei der Variablen brauchst du nicht, wenn du die Variablen so setzt:
.... set "dirup2=%%~dpm" & set "dir2=%%~dpl" & set "name=%%~nxl"

Schönes Wochenende und viel Spass beim Was-auch-immer-jagen.
Biber
mir bitte kein Bit
[/OT]