J'ai besoin du chemin d'accès au dossier contenant le fichier cmd. Avec% 0, je peux obtenir le nom du fichier. Mais comment obtenir le nom du dossier?
c: \ temp \ test.cmd >> test.cmd
PS Mon répertoire actuel! = Dossier du script.
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 "for /?" commande à l'invite. J'espère que ça aide.
Top 10 des astuces DOS Batch (Oui, DOS Batch ...) montre batchparams.bat (lien vers la source comme un point 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
cd /d "%~dp0"
(de stackoverflow.com/questions/4451668 )La réponse acceptée est utile, mais il n'est pas immédiatement évident de savoir comment récupérer un nom de fichier à partir d'un chemin si vous n'utilisez PAS de valeurs transmises. J'ai pu résoudre ce problème à partir de ce fil, mais au cas où d'autres ne seraient pas aussi chanceux, voici comment procéder:
Maintenant, la
:file_name_from_path
fonction 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 n'est pas du tout passé dans le fichier.la source
%~dp1
uniquement pour le lecteur et le chemin."
s autour!myPath!
si votre chemin contient des espaces (ou si les guillemets font partie de myPath)Afin de les affecter à des variables, assurez-vous de ne pas ajouter d'espaces devant ou après le signe égal:
Ensuite, vous ne devriez avoir aucun problème.
la source
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:
Cela renverrait ce qui suit:
Le .... revient au répertoire précédent. / ad n'affiche que les répertoires / b est une liste au format simple / s inclut tous les sous-répertoires. Ceci est utilisé pour obtenir le chemin complet du répertoire à imprimer.
la source
J'ai eu le même problème dans ma boucle où je voulais extraire les fichiers zip dans le même répertoire, puis supprimer le fichier zip. Le problème était que 7z nécessite le dossier de sortie, je devais donc obtenir le chemin du dossier de chaque fichier. Voici ma solution:
%% i était un chemin de nom de fichier complet et% ii \ .. renvoie simplement le dossier parent.
J'espère que ça aide.
la source
Si la réponse acceptée par Wadih n'a pas fonctionné pour vous, essayez
echo %CD%
la source
Cela a été mis en place avec un exemple de cmd
la source