Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Letzten zwei Unterordner aus Pfad extrahieren

Frage Entwicklung Batch & Shell

Mitglied: anve

anve (Level 1) - Jetzt verbinden

01.12.2008, aktualisiert 02.12.2008, 5276 Aufrufe, 4 Kommentare

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:
01.
@echo off 
02.
set comppath=C:\temp\test\zip\Bilder_rescaled\ 
03.
set short=%comppath:~13,-1% 
04.
echo %short%|find "/" 
05.
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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set comppath=C:\temp\test\zip\Bilder_rescaled\ 
03.
 
04.
for /f "tokens=4-5 delims=\" %%a in ("%comppath%") do( 
05.
	path=!path!_%%a	 
06.
)
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.
Mitglied: bastla
01.12.2008 um 13:35 Uhr
Hallo anve!

Wenn Du sicher bist, dass der Pfad am Ende einen "\" hat, dann so (anderenfalls eben ein "if" verwenden):
01.
@echo off & setlocal enabledelayedexpansion 
02.
set comppath=C:\temp\test\zip\Bilder_rescaled\ 
03.
 
04.
for %%i in ("%comppath:~,-1%") do ( 
05.
    set "parent=%%~dpi% 
06.
    for %%j in ("!parent:~,-1!") do set "last2=%%~nxj_%%~nxi" 
07.
08.
echo "%last2%"
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
Bitte warten ..
Mitglied: anve
01.12.2008 um 14:30 Uhr
Hallo bastla!

Wieder mal eine schnelle und funktionierende Lösung von dir! Danke!

Nur damit ich den Code besser verstehe:

Hier schneidest du nur das letzte "\" ab:
01.
for %%i in ("%comppath:~,-1%") do ( 
Hier bekommst du nur den Pfad und schneidest evtl. Dateiname & Extensions weg.
01.
set "parent=%%~dpi% 
Warum hast du '' am Anfang und ein % am Ende? Das ist wahrscheinlich die allgemeine Notation. Mit % am Anfang und am Ende wird der Ausdruck ausgewertet (aufgelöst). Und mit den %%~ kann man den Ausdruck/Pfad nach vorgegebenen Regeln auswerten. [EDIT]Das '' am Anfang gehört hier glaub ich nicht hin.[/EDIT]

Wenn ich falsch liege, bitte korrigiere mich.

Hier bekommst du alles was zwischen zwei "/" steht:
01.
for %%j in ("!parent:~,-1!") do set "last2=%%~nxj_%%~nxi" 
Aber warum schneidest du hier wieder das letzte "\" weg? Ich vermute, dass er hier ansonsten dass "/" mitnehmen würde. OK, jetzt hab ich es wahrscheinlich. Du betrachtest den letzten Teil zwischen zwei "/" als Dateiname und Erweiterung. Mittels ~nxi bzw. ~nxj filterst du diesen letzen Teil des Pfades raus. Damit er aber es so machen kann, muss das letzte "/" weg. Da ja keine Erweiterung vorhanden ist, betrachtet Windows diesen Pfad ganz normal und somit erhält man den Ordnernamen.
Dass das %%~nxi funktioniert, weiß ich. Wie kommt Windows aber zu %%~nxj? [EDIT]Funktioniert auch nur mit ni und nj[/EDIT]

Wenn ich drei for-Schleifen hätte, könnte ich dann die letzten 3 Unterordner bekommen? Das würde dann heißen, dass der Ausdruck im obigen Beispiel zwei mal "zerlegt" wurde. Eine Art rekursiver Algorithmus der von hinten an fängt ...

Ich wär jedenfalls nie von alleine darauf gekommen. Danke vielmals!

LG
anve
Bitte warten ..
Mitglied: bastla
01.12.2008 um 15:39 Uhr
Hallo anve!

set "parent=%%~dpi%
Warum hast du " am Anfang und ein % am Ende?
Wenn ich das selber wüsste - natürlich sollten es in beiden Fällen Anführungszeichen sein ...
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
Bitte warten ..
Mitglied: anve
02.12.2008 um 10:48 Uhr
Hi bastla!

Vielen Dank nochmals!

LG
anve
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Recursiv Unterordner anlegen Powershell (2)

Frage von Voiper zum Thema Batch & Shell ...

Windows Userverwaltung
Servergespeichertes Profil - Pfad ausfindig machen (6)

Frage von staybb zum Thema Windows Userverwaltung ...

Batch & Shell
Leerzeichen im Pfad (4)

Frage von Jallio zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...