Letzten zwei Unterordner aus Pfad extrahieren
Ich will die letzen zwei Unterordner eines Pfades herausfinden. Anschließend soll aus dem erhaltenen String "\" durch "_" ersetzt werden.
Hi @ll!
Ich habe folgenden Pfad:
C:\temp\test\zip\Bilder_rescaled\
Daraus soll
zip_Bilder_rescaled
werden.
Ich hab folgende Ansätze probiert:
Weder mit find noch mit findstr komme ich zu einem Ergebnis. Abgesehen davon operieren alle Beispiele auf Dateien. Ich will aber auf Strings arbeiten. Jedoch würde ich im obigen Beispiel nur als Ergebnis wissen ob der String "/" vorkommt oder nicht (wenn es funktionieren würde ...). Ich will aber die Position des vorvorletzten Schrägstriches wissen. Ich kann aber zumindest schon folgenden Teil-String filtern:
zip/Bilder_rescaled
Einen Haken hat diese Methode noch: Ich bin nicht sehr flexibel. Da aber sich der Offset (13) in meinem Beispiel gleich bleibt, geht das in Ordnung.
Ansatz 2:
Dieser Code funktioniert nicht. Im Moment hab ich den Fehler noch nicht gefunden. Eventuell könnte man hier auch find einsetzen.
Ansatz 3:
Irgendwo hab ich gelesen dass auch Regular Expressions mit batch Dateien verwendet werden können. Evtl. kann man ja mit dem was machen.
Sowas wie das obige wurde sicher schon 100 mal benötigt. Die Suche hat mir jedoch nicht geholfen, da alle immer auf Dateien operieren (wie die Befehle find und findstr). Hat jemand was passendes parat?
LG
anve
PS: Das ganze soll nur mit Windows XP Prof. Boardmitteln funktionieren. Da hilft leider kein SED.
Hi @ll!
Ich habe folgenden Pfad:
C:\temp\test\zip\Bilder_rescaled\
Daraus soll
zip_Bilder_rescaled
werden.
Ich hab folgende Ansätze probiert:
@echo off
set comppath=C:\temp\test\zip\Bilder_rescaled\
set short=%comppath:~13,-1%
echo %short%|find "/"
echo %errorlevel%
Weder mit find noch mit findstr komme ich zu einem Ergebnis. Abgesehen davon operieren alle Beispiele auf Dateien. Ich will aber auf Strings arbeiten. Jedoch würde ich im obigen Beispiel nur als Ergebnis wissen ob der String "/" vorkommt oder nicht (wenn es funktionieren würde ...). Ich will aber die Position des vorvorletzten Schrägstriches wissen. Ich kann aber zumindest schon folgenden Teil-String filtern:
zip/Bilder_rescaled
Einen Haken hat diese Methode noch: Ich bin nicht sehr flexibel. Da aber sich der Offset (13) in meinem Beispiel gleich bleibt, geht das in Ordnung.
Ansatz 2:
@echo off & setlocal enabledelayedexpansion
set comppath=C:\temp\test\zip\Bilder_rescaled\
for /f "tokens=4-5 delims=\" %%a in ("%comppath%") do(
path=!path!_%%a
)
Ansatz 3:
Irgendwo hab ich gelesen dass auch Regular Expressions mit batch Dateien verwendet werden können. Evtl. kann man ja mit dem was machen.
Sowas wie das obige wurde sicher schon 100 mal benötigt. Die Suche hat mir jedoch nicht geholfen, da alle immer auf Dateien operieren (wie die Befehle find und findstr). Hat jemand was passendes parat?
LG
anve
PS: Das ganze soll nur mit Windows XP Prof. Boardmitteln funktionieren. Da hilft leider kein SED.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 103029
Url: https://administrator.de/contentid/103029
Ausgedruckt am: 17.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo anve!
Wenn Du sicher bist, dass der Pfad am Ende einen "\" hat, dann so (anderenfalls eben ein "if" verwenden):
Für die Zerlegung mittels d/p/n/x gilt ganz einfach: Alles nach dem letzten "\" wird als Dateiname (+ ev Extension) betrachtet.
Grüße
bastla
Wenn Du sicher bist, dass der Pfad am Ende einen "\" hat, dann so (anderenfalls eben ein "if" verwenden):
@echo off & setlocal enabledelayedexpansion
set comppath=C:\temp\test\zip\Bilder_rescaled\
for %%i in ("%comppath:~,-1%") do (
set "parent=%%~dpi%
for %%j in ("!parent:~,-1!") do set "last2=%%~nxj_%%~nxi"
)
echo "%last2%"
Grüße
bastla
Hallo anve!
Wenn ich das selber wüsste - natürlich sollten es in beiden Fällen Anführungszeichen sein ...
Grüße
bastla
set "parent=%%~dpi%
Warum hast du " am Anfang und ein % am Ende?Das " am Anfang gehört hier glaub ich nicht hin.
Doch - das war Absicht: Mit dieser Schreibweise ergibt sich eine bessere Kontrolle darüber, was in die Variable aufgenommen wird (so können zB unbeabsichtigt angefügte Leerzeichen am Ende vermieden werden), ohne allerdings die Anführungszeichen selbst "einzubauen" - wenn ich Anführungszeichen benötige, kann ich diese dann ja gezielt setzen ...Wenn ich drei for-Schleifen hätte, könnte ich dann die letzten 3 Unterordner bekommen?
In diesem Fall wäre vielleicht schon zu überlegen, das Ganze in einem Unterprogramm (als eine Art "Funktion") durchzuführen - unhandlich dabei ist aber die Tatsache, dass ein Wert (der Pfad) zu übergeben ist, es aber eigentlich zwei Rückgabewerte (den letzten Ordner des Pfades und den Rest davor) gäbe.Grüße
bastla