2010-11-30 86 views
1

I ont les valeurs suivantes dans un fichier batch DOS (par exemple ...):batch DOS: obtenir dernier dossier de chemin relatif

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

je dois extraire les dernières valeurs de nom ("Jones", "Smith", "Wilson") de chaque valeur. Quelle technique puis-je utiliser qui me donnera toujours ces valeurs de sous-chaîne?

+0

[Windows cmd est ** pas ** DOS] (https://superuser.com/q/451432/241386). DOS n'a aucune capacité comme '% ~ n0' –

Répondre

2

Selon ce sujet: What is the best way to do a substring in a batch file?

Je vous suggère d'utiliser

%~n0 
+0

Je ne suis pas. Cela me montre le nom du fichier batch? Comment cela me donne-t-il pour ce que la question demande? – lance

+2

Désolé pour ma mauvaise explication. % 0 contient le chemin d'accès à votre script. Avec% ~ n0 vous extrayez le nom du script uniquement. Voici un exemple plus explicite: pour/D %% i in (".. \ Apple \ Jones", ".. \ Banana \ Smith", ".. \ Poire \ Wilson") echo %% ~ ni – Nicolas

+1

Délicieux . Je vous remercie. Note: J'ai utilisé echo %% ~ ni %% ~ xi, car mon dernier dossier (les données réelles) est un répertoire dont le nom inclut un point. – lance

0

je l'ai déjà écrit une fonction pour cela. Vous lui donnez un chemin et il vous renvoie seulement son nom de fichier ou chemin d'accès. Works pour tout chemin: URL, chemin d'accès Windows, Linux chemin, etc ...

Copiez cette fonction à la fin de votre script batch: (Instructions ci-dessous)

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 =========================================================================== 

Utilisation:

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

Résultat: Jones