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é.

825
demandé sur Andrew Swan 2011-02-17 23:15:21
la source

7 ответов

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é).

658
répondu schnaader 2016-04-17 18:53:30
la source

(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\
252
répondu smwikipedia 2018-07-06 08:18:15
la source

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!

138
répondu Andy White 2011-02-18 00:48:55
la source

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.

32
répondu Marvin Thobejane 2013-10-23 11:44:31
la source

%~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\

31
répondu null 2014-11-25 11:44:28
la source

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!

21
répondu HansBKK 2012-09-25 22:39:47
la source

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
11
répondu admin 2014-09-12 14:25:01
la source

Autres questions sur