Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Letzten zwei Unterordner aus Pfad extrahieren

Mitglied: anve

anve (Level 1) - Jetzt verbinden

01.12.2008, aktualisiert 02.12.2008, 5307 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 ..
Ähnliche Inhalte
Batch & Shell
Zeichen vor den letzten zwei Zeichen einfügen
gelöst Frage von JoachimKunzBatch & Shell3 Kommentare

Hallo Zusammen, ich habe ein kleines Problem und brauche eure Hilfe. Ich habe auf einen SELS 11 System eine ...

Microsoft Office
Letzten Unter-Ordner auf Pfad heraustrennen in Excell 2010
gelöst Frage von Rene1976Microsoft Office2 Kommentare

Hallo, gibt es eine Möglichkeit wenn in einer Spalte die Pfade (ohne Dateinamen) stehen, daraus in einer anderen Spalte ...

VB for Applications
Dateipfad extrahieren
gelöst Frage von Anna2701VB for Applications4 Kommentare

Ich habe folgendes : Filepath = TxtHyperlinkDokument.Hyperlink.Address Nun möchte ich mit Hilfe von Filepath, Filepath_Neu erzeugen, indem nur der ...

Batch & Shell
Powershell Zip extrahieren
gelöst Frage von MarabuntaBatch & Shell2 Kommentare

Hi, ich möchte ein ZIP-Archiv extrahieren, und dabei alles überschreiben. Zur Zeit kommt mit dem Code auch ein fortschrittsfenster, ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 10 StundenRouter & Routing2 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 17 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 21 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...