84 votes

Obtenir le nom du dossier courant par une commande DOS ?

Est-il possible d'obtenir le nom du dossier courant (et non le chemin du répertoire courant) en utilisant une commande DOS ? Si oui, comment ?

Ce que j'ai trouvé de plus proche, c'est ça, mais ça ne marche pas :

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

note : la tentative ci-dessus était une tentative de tokenisation de la chaîne de caractères et d'obtention du dernier token comme variable CURR.

122voto

Tamara Wijsman Points 56163

Le chemin le plus court que j'ai trouvé :

for %I in (.) do echo %~nxI

ou dans un .bat script :

for %%I in (.) do echo %%~nxI

ou dans .bat avec Get value in variable.

for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%

Explication : http://www.robvanderwoude.com/ntfor.php

nx signifie uniquement le nom et l'extension du fichier

36voto

Kurt Pfeifle Points 11465

Si vous voulez connaître l'emplacement actuel du fichier batch (et si votre Windows n'est pas une version très ancienne), tapez for /? dans une fenêtre de type "boîte DOS". Faites défiler vers le bas. Lisez.

Vous découvrirez, que vous pouvez maintenant lire (à partir de sur le fichier batch) ces variables :

%0      - as the name how this batchfile was called
%~d0    - as the drive letter where this batchfile is located ('\\' in case of share)
%~p0    - as path (without the drive letter) where this batchfile is located
%~n0    - as filename (without suffix) of this batchfile
%~x0    - as filename's suffix (without filename) of this batchfile
%~a0    - as this batchfile's file attributes
%~t0    - as this batchfile's date+time
%~z0    - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]

Cela fonctionne dans de nombreux cas. Supposons que le fichier batch s'appelle mytest.bat . Vous pouvez l'appeler de différentes manières :

  1. ..\..\to\mytest.bat ............................... (chemin relatif)
  2. d:\path\to\mytest.bat ........................... (chemin complet)
  3. \\fileserver\sharename\mytest.bat ... (chemin sur le partage distant)

...et vous obtiendrez toujours la bonne valeur dans vos variables.

18voto

Marc Wittke Points 376

J'ai personnellement aimé la réponse de Tom, jusqu'à ce qu'il ait du mal avec les points dans les noms de personnes. Ce site m'a donné un indice :

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa

6voto

Brian Sidebotham Points 161

La réponse de Tom est bonne, mais si vous avez un nom de répertoire avec un point (par exemple wxwidgets-2.9.4), vous n'obtiendrez que le nom complet. Ainsi, cela donnerait wxwidgets-2.9 à la place parce que le .4 a été traité comme une extension (Oui, même si c'est un nom de répertoire !).

Pour obtenir le nom complet de la sortie, vous devez ajouter l'extension à la fin :

FOR %I IN (.) DO Echo %~nI%~xI

et en mode fichier batch :

FOR %%I IN (.) DO Echo %%~nI%%~xI

Ou, bien sûr, définissez plutôt une variable dans le fichier de commandes :

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI

5voto

lenz Points 51

Un autre moyen est :

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%  

il fonctionne avec "." et les espaces dans le nom de chemin

Que fait-il ?

  1. mettre le nom de fichier entier (driveletter-path-filename-extension) en MyPath Var

  2. supprimer le nom de fichier et l'extension de MyPath var

Il fonctionne également avec les chemins UNC. Si vous avez besoin de la barre oblique inversée à la fin du chemin. Supprimez le \ après MyPath dans la seconde commande, par exemple

set "MyPath=%%MyPath:%~nx0=%%"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X