2010-07-06 21:29:58 +0000 2010-07-06 21:29:58 +0000
68
68

Obtenir le nom du dossier actuel par une commande DOS ?

Est-il possible d'obtenir le nom du dossier actuel (et non le chemin d'accès au dossier actuel) en utilisant une commande DOS ? Si oui, comment ?

Le plus proche que j'ai pu obtenir était ceci mais ça ne le fait pas :

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

note : la tentative ci-dessus était que j'essayais de tokeniser la chaîne et d'obtenir le dernier token défini comme variable CURR.

Réponses (9)

95
95
95
2010-07-06 22:27:07 +0000

Le 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 dans un script .bat avec Get value in variable.

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

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

nx signifie le nom et l'extension du fichier uniquement

31
31
31
2010-08-07 14:55:35 +0000

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

Vous découvrirez que vous pouvez maintenant lire (à partir de dans 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 façons :

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

…et vous aurez toujours la bonne valeur dans vos variables.

16
16
16
2011-11-17 09:20:12 +0000

Personnellement, j'aimais bien la réponse de Toms, jusqu'à ce qu'il se débatte avec des points dans les noms de dir. (http://forums.devshed.com/windows-help-34/finding-last-token-in-batch-file-412970.html) m'a donné un indice :

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
```.
5
5
5
2013-08-06 13:11:55 +0000

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. Cela donnerait donc wxwidgets-2.9 à la place, car 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 une variable dans le fichier de traitement par lots à la place :

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
4
4
4
2012-03-15 10:19:31 +0000

Une autre façon est :

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

cela fonctionne avec “.” et des espaces dans le nom de chemin

Que fait-il ?

  1. mettre 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 du Backslash à la fin du chemin. Supprimez le `Une autre façon est :

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

cela fonctionne avec “.” et des espaces dans le nom de chemin

Que fait-il ?

  1. mettre 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 du Backslash à la fin du chemin. Supprimez le après MyPath dans la deuxième commande set, par exemple

set "MyPath=%%MyPath:%~nx0=%%"
4
4
4
2012-04-24 15:54:31 +0000

Vous pouvez introduire le dir courant dans une variable. Une ligne :

set a=%cd%

Vérifier avec

echo %a%
```.
2
2
2
2016-10-10 02:11:12 +0000

juste simple

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

ou

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

Attention au backslash de la fin de parcours, il ne doit pas être le backslash de la fin.

1
1
1
2011-12-07 18:59:40 +0000

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
1
1
2015-05-28 16:08:10 +0000

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

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