Un fichier de commandes Windows peut-il déterminer son propre nom de fichier?
Par exemple, si j'exécute le fichier de commandes C: \ Temp \ myScript.bat, existe-t-il une commande dans myScript.bat qui peut déterminer la chaîne "myScript.bat"?
windows
batch-file
cmd
Djangofan
la source
la source
%0
est ce que vous recherchez. Voir [cette question] [1] pour en savoir plus. [1]: stackoverflow.com/questions/357315/…Réponses:
Oui.
Utilisez la
%0
variable spéciale pour obtenir le chemin d'accès au fichier actuel.Écrivez
%~n0
pour obtenir uniquement le nom de fichier sans l'extension.Écrivez
%~n0%~x0
pour obtenir le nom de fichier et l'extension.Également possible d'écrire
%~nx0
pour obtenir le nom de fichier et l'extension.la source
cd
au répertoire et exécutez le lot à partir de là,% 0 n'aura généralement pas les informations de chemin (mais vous pouvez l'obtenir à partir de% cd% dans ce cas)%cd%
renvoie le répertoire actuel du processus qui a appelé le fichier de commandes. Donc, si vous êtes à une invite d'D:\dir1
entrée et entrezY:\foo\bar.bat
, sibar.bat
a,@echo %cd%
il sortiraD:\dir1
.Vous pouvez obtenir le nom du fichier, mais vous pouvez également obtenir le chemin d'accès complet, en fonction de ce que vous placez entre le «% ~» et le «0». Faites votre choix
Par exemple, de l'intérieur de c: \ tmp \ foo.bat,
%~nx0
vous donne "foo.bat", tandis que%~dpnx0
donne "c: \ tmp \ foo.bat". Notez que les pièces sont toujours assemblées dans l'ordre canonique, donc si vous devenez mignon et essayez%~xnpd0
, vous obtenez toujours "c: \ tmp \ foo.bat"la source
f
s'agit du nom de fichier, mais dans vos exemples, vous utilisezn
pour le nom de fichier. Après quelques tests, il semble que cef
soit le chemin complet etn
le nom du fichier.%~xnpd0
" ... Je t'aime.En utilisant le script suivant, basé sur la réponse SLaks, j'ai déterminé que la bonne réponse est:
Et voici mon script de test:
Ce que je trouve intéressant, c'est que % nx0 ne fonctionnera pas, étant donné que nous savons que le caractère «~» est généralement utilisé pour supprimer / couper les guillemets d'une variable.
la source
Gardez à l'esprit qu'il
0
s'agit d'un cas particulier de numéros de paramètres dans un fichier de commandes, où0
signifie ce fichier tel qu'il est indiqué sur la ligne de commande .Donc, si le fichier est myfile.bat, vous pouvez l'appeler de plusieurs manières comme suit, chacune vous donnant une sortie différente de l' utilisation de
%0
ou%~0
:myfile
myfile.bat
mydir\myfile.bat
c:\mydir\myfile.bat
"c:\mydir\myfile.bat"
Tous les appels ci-dessus sont des appels légaux si vous l'appelez du bon endroit relatif au répertoire dans lequel il existe.
%~0
supprime les citations du dernier exemple, alors que%0
n'est pas le cas.Parce que tout cela donne des résultats différents
%0
et qu'il%~0
est très peu probable que ce soit ce que vous voulez réellement utiliser.Voici un fichier batch pour illustrer:
la source
Essayez d'exécuter l'exemple ci-dessous afin de ressentir le fonctionnement des variables magiques.
Les règles associées sont les suivantes.
la source
Voici mon code initial:
J'ai remarqué que le nom de fichier donné par% ~ 0 et% 0 est la façon dont il a été entré dans le shell de commande et non comment ce fichier est réellement nommé. Donc, si vous voulez que la casse littérale soit utilisée pour le nom de fichier, vous devez utiliser% ~ n0. Cependant, cela laissera de côté l'extension de fichier. Mais si vous connaissez le nom du fichier, vous pouvez ajouter le code suivant.
J'ai appris que ": ~ 8,4%" signifie commencer au 9ème caractère de la variable, puis afficher les 4 caractères suivants. La plage est comprise entre 0 et la fin de la chaîne variable. Donc% Path% serait très long!
Cependant, ce n'est pas aussi valable que la solution de Jool (% ~ x0) ci-dessus.
Ma preuve:
Voici le code final
la source