Je trouve %~dp0
très utile et je l’utilise beaucoup pour rendre mes fichiers de commandes plus portables.
Mais le label lui-même me semble très énigmatique … que fait-on? dp
veut-il dire conduire et chemin? le 0
référence à %0
, le chemin d’access au fichier de commandes qui inclut le nom du fichier?
Ou est-ce juste une étiquette bizarre?
J’aimerais aussi savoir si c’est une fonctionnalité documentée ou quelque chose qui est susceptible d’être déprécié.
Appel
for /?
dans la ligne de commande, aide à propos de cette syntaxe (qui peut aussi être utilisée en dehors de FOR, c’est juste l’endroit où on peut trouver de l’aide).
De plus, la substitution des références aux variables FOR a été améliorée. Vous pouvez maintenant utiliser la syntaxe facultative suivante:
%~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 atsortingbutes 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 ssortingng
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
Dans les exemples ci-dessus,% I et PATH peuvent être remplacés par d’autres valeurs valides. La syntaxe% ~ est terminée par un nom de variable FOR valide. Choisir des noms de variables en majuscules comme% I le rend plus lisible et évite toute confusion avec les modificateurs, qui ne sont pas sensibles à la casse.
Il existe différentes lettres que vous pouvez utiliser comme f
pour “nom de chemin complet”, d
pour lettre de lecteur, p
pour chemin, et elles peuvent être combinées. %~
est le début de chacune de ces séquences et un nombre I
indique qu’il fonctionne sur le paramètre %I
(où %0
est le nom complet du fichier de commandes, comme vous l’avez supposé).
(Tout d’abord, je voudrais recommander ce site de référence utile pour le lot: http://ss64.com/nt/ )
Alors juste une autre explication utile: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
La variable% ~ dp0
La variable% ~ dp0 (c’est-à-dire zéro) lorsqu’elle est référencée dans un fichier de commandes Windows va s’étendre à la lettre de réponse et à la liste de ce fichier de commandes.
Les variables% 0-% 9 font référence aux parameters de ligne de commande du fichier de commandes. % 1-% 9 fait référence aux arguments de la ligne de commande après le nom du fichier de commandes. % 0 fait référence au fichier batch lui-même.
Si vous suivez le caractère de pourcentage (%) avec un caractère tilde (~), vous pouvez insérer un ou des modificateurs avant le numéro de paramètre pour modifier la manière dont la variable est développée. Le modificateur d se développe en lettre de lecteur et le modificateur p se développe en chemin du paramètre.
Exemple: Disons que vous avez un répertoire sur C: appelé bat_files, et dans ce répertoire se trouve un fichier nommé example.bat. Dans ce cas,% ~ dp0 (combinant les modificateurs d et p) se développera en C: \ bat_files.
Consultez cet article Microsoft pour une explication complète.
Aussi, consultez ce fil de forum .
Et une référence plus claire d’ ici :
%CmdCmdLine%
renverra la ligne de commande entière transmise à CMD.EXE
%*
renverra le rest de la ligne de commande en commençant au premier argument de la ligne de commande (dans Windows NT 4,% * inclut également tous les espaces avant)
%~dn
retournera la lettre de lecteur de% n (n peut être compris entre 0 et 9) si% n est un nom de fichier ou de chemin valide (pas de code UNC)
%~pn
retournera le répertoire de% n si% n est un nom de fichier ou de chemin valide (pas de UNC)
%~nn
renverra le nom du fichier uniquement de% n si% n est un nom de fichier valide
%~xn
renverra uniquement l’extension de fichier% n si% n est un nom de fichier valide
%~fn
renverra le chemin complet de% n si% n est un nom de fichier ou un répertoire valide
Juste trouvé une bonne référence pour l’opérateur mystérieux ~
tilde.
La chaîne %~
est appelée opérateur percent tilde . Vous pouvez le trouver dans des situations telles que: %~0
.
La chaîne :~
est appelée opérateur tilde à deux points . Vous pouvez le trouver comme %SOME_VAR:~0,-1%
.
%1-%9
référence aux arguments de la ligne de commande. Si ce ne sont pas des valeurs de chemin valides, %~dp1
– %~dp9
s’étendent tous à la même valeur que %~dp0
. Mais si ce sont des valeurs de chemin valides, elles développeront leur propre valeur de pilote / chemin.
Par exemple: (batch.bat)
@echo off @echo ~dp0= %~dp0 @echo ~dp1= %~dp1 @echo ~dp2= %~dp2 @echo on
Run 1:
D:\Workbench>batch arg1 arg2 ~dp0= D:\Workbench\ ~dp1= D:\Workbench\ ~dp2= D:\Workbench\
Run 2:
D:\Workbench>batch c:\123\a.exe e:\abc\b.exe ~dp0= D:\Workbench\ ~dp1= c:\123\ ~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 traitement par lots est définie sur le nom du fichier de commandes en cours 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 d’access, ce qui vous donne le répertoire actuel contenant le fichier de commandes!
Un autre conseil qui aiderait beaucoup est que pour définir le répertoire courant sur un autre lecteur, il faudrait d’abord utiliser %~d0
, puis cd %~dp0
. Cela changera le répertoire au lecteur du fichier de commandes, puis changera de dossier.
Sinon, pour #oneLinerLovers, comme @Omni l’a souligné dans les commentaires cd /d %~dp0
changera à la fois le lecteur et le répertoire 🙂
J’espère que cela aide quelqu’un.
% ~ dp0 se développe en chemin de répertoire en cours du fichier batch en cours d’exécution.
Pour bien comprendre, créons un fichier de commandes dans un répertoire.
C: \ script \ test.bat
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 du lanceur de shells portable de Strawberry Perl:
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 suis pas sûr de ce que le négatif 1 fait là-bas, mais ça marche un régal!
Un exemple serait bien – en voici un sortingvial
for %I in (*.*) do @echo %~xI
il ne liste que les EXTENSIONS de chaque fichier dans le dossier actuel
pour des combinaisons de variables plus utiles (également répertoriées dans la réponse précédente) à partir 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