Que signifie %~dp0 et comment cela fonctionne-t-il?
je trouve %~dp0
très utile, et je l'utilise beaucoup pour rendre mes fichiers par lot plus portable.
mais l'étiquette elle-même me semble très cryptique... que fait le ~
? est-ce que dp
signifie drive et path? est-ce que le 0
fait référence à %0
, le chemin vers le fichier de lots qui inclut le nom du fichier?
ou c'est juste une étiquette bizarre?
j'aimerais aussi savoir si c'est une fonctionnalité documentée, ou quelque chose de susceptible d'être déprécié.
7 réponses
appel
for /?
dans la ligne de commande donne de l'aide sur la syntaxe (qui peut être utilisé à l'extérieur, trop, c'est juste l'endroit où l'aide peut être trouvé).
en outre, substitution de de les références variables ont été améliorées. Vous pouvez maintenant utiliser l'option suivante syntaxe:
%~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 %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string
les modificateurs peuvent être combinés pour obtenir résultat composé:
%~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 %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line
dans les exemples ci-dessus %I et PATH can être remplacé par d'autres valeurs valides. La syntaxe %~ est terminée par une valeur valide POUR le nom de variable. La cueillette des majuscules des noms de variables comme %I le rend plus lisible et évite toute confusion avec le modificateurs, qui ne sont pas des cas sensible.
il y a différentes lettres que vous pouvez utiliser comme f
pour "nom de chemin complet", d
pour la lettre de lecteur, p
pour le chemin, et ils peuvent être combinés. %~
est le début de chacune de ces séquences et un numéro I
indique qu'il fonctionne sur le paramètre %I
(où %0
est le nom complet du fichier batch, comme vous l'avez supposé).
(tout d'abord, je tiens à recommander ce site de référence utile pour les: http://ss64.com/nt / )
puis juste une autre explication utile: http://htipe.wordpress.com/2008/10/09/the-dp0-variable /
la Variable %~dp0
la variable %~dp0 (c'est un zéro) lorsqu'elle est référencée dans une fenêtre le fichier de lot s'étendra à la d lettre vive et P ath de ce lot fichier.
les variables %0- % 9 se réfèrent aux paramètres de ligne de commande du lot fichier. %1-%9 se référer à des arguments de ligne de commande après le lot de nom de fichier. %0 désigne le fichier de commandes.
Si vous suivez le caractère pourcentage (%) avec un tilde (~), vous pouvez insérer un modificateur(s) avant le numéro du paramètre à modifier la façon dont la variable est élargir. Le modificateur d s'étend à la commande la lettre et le modificateur P s'étendent au chemin du paramètre.
exemple: disons que vous avez un répertoire sur C: appelé bat_files, et dans ce répertoire un fichier nommé exemple.chauve. Dans ce cas, %~dp0 (combinaison des modificateurs d et p) s'étendra à C:\bat_files.
Check out cet article de Microsoft pour une explication complète.
aussi, consultez ce forum fil .
et une référence plus claire de ici :
-
%CmdCmdLine%
retournera toute la ligne de commande telle qu'elle a été transmise au CMD.EXE -
%*
retournera le reste de la ligne de commande à partir du premier argument de ligne de commande (dans Windows NT 4, %* comprend également toutes les places principales) -
%~dn
retournera la lettre d'entraînement de %n (n peut varier de 0 à 9) si %n est un chemin valide ou un nom de fichier (aucun UNC) -
%~pn
retournera le répertoire de %n Si %n est un chemin valide ou un nom de fichier (aucun UNC) -
%~nn
retournera le nom de fichier seulement de %n Si %n est un nom de fichier valide -
%~xn
retournera l'extension de fichier seulement de %n Si %n est un nom de fichier valide -
%~fn
retournera le chemin entièrement qualifié de %n Si %n est un nom de fichier ou un répertoire valide
ajouter 1
vient de trouver une bonne référence pour le mystérieux ~
opérateur tilde.
la chaîne %~
s'appelle pourcentage tilde opérateur. Vous pouvez le trouver dans des situations comme: %~0
.
la chaîne :~
s'appelle colon tilde opérateur. Vous pouvez le trouver comme %SOME_VAR:~0,-1%
.
ADD 2-1: 12 PM 7/6/2018
%1-%9
se référer à la ligne de commande args. S'ils sont pas les valeurs valides du chemin, %~dp1
- %~dp9
seront toutes étendues à la même valeur que %~dp0
. Mais si elles sont chemin d'accès valide valeurs, ils s'étendent pour leur propre pilote/valeur du chemin.
par exemple: (lot.chauve-souris)
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
1:
D:\Workbench>batch arg1 arg2
~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
Exécuter 2:
D:\Workbench>batch c:3\a.exe e:\abc\b.exe
~dp0= D:\Workbench\
~dp1= c:3\
~dp2= e:\abc\
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
la variable %0
dans un script de lot est définie au nom du fichier de lot d'exécution. La syntaxe spéciale ~dp
entre le %
et le 0
dit essentiellement d'étendre la variable %0
pour afficher la lettre de lecteur et le chemin, ce qui vous donne le répertoire courant contenant le fichier batch!
une autre astuce qui aiderait beaucoup est que pour définir le répertoire courant à un lecteur différent on devrait utiliser %~d0
d'abord, puis cd %~dp0
. Cela changera le répertoire dans le lecteur du fichier batch, puis changer dans son dossier.
alternativement, pour #oneLinerLovers, comme @Omni l'a souligné dans les commentaires cd /d %~dp0
va changer à la fois les lecteur et le répertoire :)
J'espère que ça aidera quelqu'un.
%~dp0 s'étend au chemin de répertoire courant du fichier batch en cours d'exécution.
pour obtenir une compréhension claire, créons un fichier batch dans un répertoire.
C:\script\test.chauve-souris
avec contenu:
@echo off
echo %~dp0
lorsque vous l'exécutez depuis l'invite de commande, vous verrez ce résultat:
C:\script\
Excellent exemple de Strawberry Perl portable shell launcher:
set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%
set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%
Je ne sais pas ce que le négatif 1 fait là-bas moi-même, mais ça marche!
un exemple serait bien - voici un trivial
for %I in (*.*) do @echo %~xI
il ne Liste que les EXTENSIONS de chaque fichier dans le dossier courant
pour les combinaisons de variables plus utiles (également listées dans la réponse précédente) de L'invite CMD, exécutez: HELP FOR
qui contient cet extrait
Les modificateurs peuvent être combinés pour obtenir des résultats composés:
%~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
%~dp$PATH:I - searches the directories listed in the PATH
environment variable for %I and expands to the
drive letter and path of the first one found.
%~ftzaI - expands %I to a DIR like output line