web-dev-qa-db-fra.com

Obtenir le nom du dossier actuel par une commande DOS?

Est-il possible d'obtenir le nom du dossier actuel (pas le chemin du répertoire actuel) en utilisant une commande DOS? Si c'est le cas, comment?

Le plus proche que j'ai eu était celui-ci mais il ne le fait pas:

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

remarque: la tentative ci-dessus était une tentative de tokenize de la chaîne et d'obtenir le dernier jeton défini en tant que variable CURR.

53
djangofan

Plus court chemin que j'ai trouvé:

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

ou dans un script .bat:

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

ou en .bat avec Get dans variable.

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

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

nx signifie nom de fichier et extension uniquement

76
Tom Wijsman

Si vous souhaitez connaître l'emplacement actuel du fichier de commandes (et si votre version de Windows n'est pas une version très ancienne), tapez for /? dans une fenêtre 'Boîte DOS'. Défiler vers le bas. Lis.

Vous découvrirez que vous pouvez maintenant lire (depuis dans le fichier de commandes) 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 de commandes 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.

30
Kurt Pfeifle

Personnellement, j’ai aimé la réponse de Toms, jusqu’à ce qu’elle se débatte avec des points dans les noms de dir. Cela m'a donné un indice:

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

La réponse de Tom est bonne, mais si vous avez un nom de répertoire avec un point (c'est-à-dire wxwidgets-2.9.4), vous n'obtiendrez que le nom complet. Donc, cela produirait wxwidgets-2.9 ​​à la place car le .4 a été traité comme une extension (Oui, même s’il s’agit d’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 de traitement par lots:

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

Ou bien sûr, définissez une variable dans le fichier de commandes à la place:

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

Une autre façon est:

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

cela fonctionne avec "." et espaces dans le chemin

Qu'est ce que ça fait?

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

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

Cela fonctionne aussi avec les chemins UNC. Si vous avez besoin de la barre oblique inverse à la fin du chemin. Supprimez le \ après MyPath dans la deuxième commande set, par exemple.

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

Vous pouvez obtenir le répertoire courant dans une variable. Bon mot:

set a=%cd%

Vérifier avec

echo %a%
4
vera

juste simple

for %%d in ("%CD%") do echo %%~nxd

ou

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

Faites attention à la barre oblique inverse de la fin du chemin, il ne doit pas s'agir d'une barre oblique inverse de la fin.

2
kygg

Ma réponse dans ce fil le fait en 3 lignes simples:

@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul
1
djangofan

Cela fonctionne pour moi à partir d'un fichier de commandes. Il renvoie le nom du répertoire de travail actuel.

pushd %1 & for %%i in (.) do @echo %%~ni
1
nem50