Je trouve cela %~dp0
très utile et je l'utilise beaucoup pour rendre mes fichiers batch plus portables.
Mais le label lui-même me semble très cryptique ... Que ~
fait-on? Cela dp
signifie- t -il conduire et chemin? Le fait-il 0
référence au %0
chemin d'accès au fichier de commandes qui inclut le nom du fichier?
Ou c'est juste une étiquette bizarre?
J'aimerais également savoir s'il s'agit d'une fonctionnalité documentée ou d'un élément susceptible d'être déconseillé.
batch-file
Sebastián Grignoli
la source
la source
%~dp0
. Habituellement, je trouve que les meilleurs résultats font référence au contenu sur SO.Réponses:
Appel
dans la ligne de commande donne de l'aide sur cette syntaxe (qui peut également être utilisée en dehors de FOR, c'est juste l'endroit où l'aide peut être trouvée).
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 nombreI
indique que cela fonctionne sur le paramètre%I
(où%0
est le nom complet du fichier de commandes, comme vous l'avez supposé).la source
I
. Je dois utiliser à la0
place deI
. Je ne sais pas si j'ai raté quelque chose ou quoi que ce soit, mais juste pour faire savoir aux gens.I
est un espace réservé pour l'index variable.0
= le fichier appelant,1
= argument # 1,2
= argument # 2, etc ...(Tout d'abord, je voudrais recommander ce site de référence utile pour le lot: http://ss64.com/nt/ )
Puis juste une autre explication utile: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
Et une référence plus claire d' ici :
%CmdCmdLine%
renverra la ligne de commande entière transmise à CMD.EXE%*
renverra le reste de la ligne de commande à partir du premier argument de ligne de commande (dans Windows NT 4,% * inclut également tous les espaces de tête)%~dn
renverra la lettre de lecteur de% n (n peut aller de 0 à 9) si% n est un chemin d'accès ou un nom de fichier valide (pas UNC)%~pn
renverra le répertoire de% n si% n est un chemin d'accès ou un nom de fichier valide (pas UNC)%~nn
renverra le nom de fichier uniquement de% n si% n est un nom de fichier valide%~xn
renverra l'extension de fichier uniquement de% n si% n est un nom de fichier valide%~fn
renverra le chemin d'accès complet de% n si% n est un nom de fichier ou un répertoire valideAJOUTER 1
Je viens de trouver une bonne référence pour le mystérieux
~
opérateur tilde.La
%~
chaîne est appelée opérateur de pourcentage tilde . Vous pouvez le trouver dans des situations telles que :%~0
.La
:~
chaîne est appelée opérateur tilde du côlon . Vous pouvez le trouver comme%SOME_VAR:~0,-1%
.AJOUTER 2 - 1:12 PM 7/6/2018
%1-%9
reportez-vous aux arguments de la ligne de commande. S'ils ne sont pas des valeurs de chemin valides,%~dp1
-%~dp9
s'étendra tous à la même valeur que%~dp0
. Mais si ce sont des valeurs de chemin valides, elles se développeront à leur propre valeur de pilote / chemin.Par exemple: (batch.bat)
Exécuter 1:
Exécuter 2:
la source
La variable
%0
d'un script de commandes est définie sur le nom du fichier de commandes en cours d'exécution.La
~dp
syntaxe spéciale entre le%
et le0
dit essentiellement de développer la variable%0
pour afficher la lettre de lecteur et le chemin d'accès, ce qui vous donne le répertoire actuel contenant le fichier de commandes!Aide = Lien
la source
%0
directement dans la cmd sans enregistrer un fichier .bat sur le disque dur local?% ~ dp0 se développe vers le chemin de répertoire actuel du fichier de commandes en cours d'exécution.
Pour bien comprendre, créons un fichier batch dans un répertoire.
avec contenu:
Lorsque vous l'exécutez à partir de l'invite de commande, vous verrez ce résultat:
la source
Une autre astuce qui aiderait beaucoup est que pour définir le répertoire actuel sur un lecteur différent, il faudrait d'
%~d0
abord utilisercd %~dp0
. Cela changera le répertoire sur le lecteur du fichier de commandes, puis changera dans son dossier.Alternativement, pour #oneLinerLovers, comme @Omni l'a souligné dans les commentaires,
cd /d %~dp0
cela changera à la fois le lecteur et le répertoire :)J'espère que cela aide quelqu'un.
la source
cd
a un paramètre intégré qui commutera à la fois le lecteur et le dossier:cd /d %~dp0
/d
argument est utile, mais il mérite d'être publié en tant que réponse alternative candidate et non en tant que commentaire à celle-ci. Merci de l' avoir signalé, je ne le savais pas :)Excellent exemple du lanceur de shell portable de Strawberry Perl:
Je ne sais pas ce que le négatif fait là-bas moi-même, mais ça marche un régal!
la source
Un exemple serait bien - en voici un trivial
il répertorie uniquement 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 execute:
HELP FOR
qui contient cet extraitLes modificateurs peuvent être combinés pour obtenir des résultats composés:
la source