bithunter
Goto Top

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

Content-Key: 164210

Url: https://administrator.de/contentid/164210

Printed on: April 25, 2024 at 02:04 o'clock

Member: bastla
bastla Apr 08, 2011 at 08:38:18 (UTC)
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
Member: bithunter
bithunter Apr 08, 2011 at 08:53:40 (UTC)
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.
Mitglied: 60730
60730 Apr 08, 2011 at 09:08:18 (UTC)
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
Member: bithunter
bithunter Apr 08, 2011 at 09:15:19 (UTC)
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
Member: Biber
Biber Apr 08, 2011 at 09:47:26 (UTC)
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
Member: bithunter
bithunter Apr 08, 2011 at 10:05:27 (UTC)
Goto Top
Vielen Dank!

Damit funktioniert es einwandfrei und ist klomplett variabel.
Member: bastla
bastla Apr 08, 2011 at 10:12:10 (UTC)
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
Member: Biber
Biber Apr 08, 2011 at 10:58:27 (UTC)
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
Member: bithunter
bithunter Apr 08, 2011 at 11:09:36 (UTC)
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.
Member: Skyemugen
Skyemugen Apr 08, 2011 at 11:10:07 (UTC)
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é
Member: Biber
Biber Apr 08, 2011 at 11:58:48 (UTC)
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]