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.
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
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:
..\..\to\mytest.bat
............................... (chemin relatif) d:\path\to\mytest.bat
........................... (chemin complet) \\fileserver\sharename\mytest.bat
... (chemin sur le partage distant) ... et vous obtiendrez toujours la bonne valeur dans vos variables.
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
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
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?
placez le nom de fichier entier (driveletter-path-filename-extension) dans MyPath
Var
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=%%"
Vous pouvez obtenir le répertoire courant dans une variable. Bon mot:
set a=%cd%
Vérifier avec
echo %a%
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.
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
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