Comment obtenir le chemin du dossier à partir du chemin du fichier avec CMD

J'ai besoin du chemin vers le dossier qui contient le fichier cmd. Avec %0, Je peux obtenir le nom du fichier. Mais comment obtenir le nom du dossier?

C:temptest.cmd >> de test.cmd

PS mon répertoire actuel != dossier du script.

133
demandé sur Mike Chaliy 2009-03-18 21:56:22

6 réponses

Pour le nom du dossier et le lecteur, vous pouvez utiliser:

echo %~dp0

Vous pouvez obtenir beaucoup plus d'informations en utilisant différents modificateurs:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file

The modifiers can be combined to get compound results:
%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only

Ceci est un copier-coller du "pour /?"commande à l'invite. Espérons que cela aide.

Connexes

Top 10 Dos lot conseils (Oui, DOS lot...) affiche batchparams.bat (lien vers la source comme essentiel):

C:\Temp>batchparams.bat c:\windows\notepad.exe
%~1     =      c:\windows\notepad.exe
%~f1     =      c:\WINDOWS\NOTEPAD.EXE
%~d1     =      c:
%~p1     =      \WINDOWS\
%~n1     =      NOTEPAD
%~x1     =      .EXE
%~s1     =      c:\WINDOWS\NOTEPAD.EXE
%~a1     =      --a------
%~t1     =      08/25/2005 01:50 AM
%~z1     =      17920
%~$PATHATH:1     =
%~dp1     =      c:\WINDOWS\
%~nx1     =      NOTEPAD.EXE
%~dp$PATH:1     =      c:\WINDOWS\
%~ftza1     =      --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE
281
répondu Wadih M. 2011-08-05 19:46:45

La réponse acceptée est utile, mais il n'est pas immédiatement évident de récupérer un nom de fichier à partir d'un chemin si vous n'utilisez pas de valeurs transmises. J'ai pu travailler cela à partir de ce fil, mais au cas où d'autres ne seraient pas aussi chanceux, voici comment cela se fait:

@echo off
setlocal enabledelayedexpansion enableextensions

set myPath=C:\Somewhere\Somewhere\SomeFile.txt
call :file_name_from_path result !myPath!
echo %result%
goto :eof

:file_name_from_path <resultVar> <pathVar>
(
    set "%~1=%~nx2"
    exit /b
)

:eof
endlocal

Maintenant, la fonction :file_name_from_path peut être utilisée n'importe où pour récupérer la valeur, pas seulement pour les arguments passés. Cela peut être extrêmement utile si les arguments peuvent être passés dans le fichier dans un ordre indéterminé ou si le chemin ne l'est pas passé dans le fichier du tout.

43
répondu NightOwl888 2012-11-08 16:48:34

Pour les affecter aux variables, veillez à ne pas ajouter d'espaces devant ou après le signe égal:

set filepath=%~dp1
set filename=%~nx1

Alors vous ne devriez pas avoir de problèmes.

6
répondu Frank 2011-02-26 22:38:38

Au cas où quelqu'un voudrait une méthode alternative...

S'il s'agit du dernier sous-répertoire du chemin, vous pouvez utiliser ce one-liner:

cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s

Cela renverrait ce qui suit:

c:\directory\subdirectory

Le .... des gouttes de revenir au répertoire précédent. / ad affiche uniquement les répertoires /b est une liste de format nu /s inclut tous les sous-répertoires. Ceci est utilisé pour obtenir le chemin complet du répertoire à imprimer.

2
répondu Mark 2014-04-29 16:40:17

, j'ai eu le même problème dans ma boucle où je voulais extraire des fichiers zip dans le même répertoire, puis supprimez le fichier zip. Le problème était que 7z nécessite le dossier de sortie, Donc j'ai dû obtenir le chemin du dossier de chaque fichier. Voici ma solution:

FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
  7z.exe x %%i -aoa -o%%i\..
) 

% % I était un chemin de nom de fichier complet et %ii\.. renvoie simplement le dossier parent.

J'espère que ça aide.

2
répondu Gico 2016-11-11 09:53:11

Dans le cas où la réponse acceptée par Wadih ne fonctionnait pas pour vous, essayez echo %CD%

2
répondu Naguib Ihab 2017-12-04 00:59:33