2010-11-30 19 views
1

Ich habe folgende Werte in einer DOS-Batch-Datei (zum Beispiel ...):DOS Batch: get letzte Ordner von relativem Pfad

..\Apple\Jones 
..\Banana\Smith 
..\Pear\Wilson 

Ich brauche den Nachnamen-Wert ("Jones" zu extrahieren, "Smith", "Wilson") von jedem Wert. Welche Technik kann ich verwenden, die mir immer diese Teilstring-Werte gibt?

+0

[Windows cmd ist ** nicht ** DOS] (https://superuser.com/q/451432/241386). DOS hat keine Fähigkeit wie '% ~ n0' –

Antwort

2

Nach diesem Thema: What is the best way to do a substring in a batch file?

Ich schlage vor, Sie

%~n0 
+0

ich folge nicht. Das zeigt mir den Namen der Batch-Datei? Wie gibt mir das für was die Frage fragt? – lance

+2

Entschuldigung für meine schlechte Erklärung. % 0 enthält den Pfad zu Ihrem Skript. Mit% ~ n0 extrahieren Sie nur den Skriptnamen. Hier ist ein deutlicher exemple: für/D %% i in (".. \ Apple-\ Jones", ".. \ Banana \ Smith", ".. \ Pear \ Wilson") do echo %% ~ ni – Nicolas

+1

Delightful . Vielen Dank. Hinweis: Ich habe echo %% ~ ni %% ~ xi verwendet, da mein letzter Ordner (die echten Daten) ein Verzeichnis ist, dessen Name einen Punkt enthält. – lance

0

ich eine Funktion für das bereits verwenden geschrieben. Sie geben ihm einen beliebigen Pfad und es gibt nur seinen Dateinamen oder Pfadnamen zurück. Arbeitet für jeden Pfad: Url, Windows-Pfad, Linux Pfad, etc ...

Kopieren Sie diese Funktion am Ende der Batch-Skript: (Anleitung unten)

rem =========================================================================== 

:Name_From_Path 
SetLocal 

set _TMP_FOLDERNAME=%1 
for %%g in ("%_TMP_FOLDERNAME%") do set _TMP_FOLDERNAME=%%~nxg 

EndLocal & set _Name_From_Path=%_TMP_FOLDERNAME% 
goto :EOF 

rem =========================================================================== 

Verbrauch:

CALL :Name_Of_Path ..\Apple\Jones 
ECHO %_Name_From_Path% 

Ergebnis: Jones