Comment pouvez-vous obtenir le répertoire du script qui a été exécuté et l'utiliser dans le fichier .cmd?
Raymond Chen a quelques idées:
https://devblogs.Microsoft.com/oldnewthing/20050128-00/?p=3657
Citées ici en totalité car les archives MSDN ont tendance à être quelque peu peu fiables:
Le moyen le plus simple est d'utiliser le
%CD%
pseudo-variable. Il se développe dans le répertoire de travail actuel.
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Bien entendu, la sauvegarde/restauration de répertoire aurait pu être plus facilement réalisée avec
pushd
/popd
, mais ce n'est pas le problème ici.)Le
%CD%
Le truc est pratique même à partir de la ligne de commande. Par exemple, je me trouve souvent dans un répertoire contenant un fichier sur lequel je souhaite travailler mais ... oh, je dois accéder à un autre répertoire pour pouvoir effectuer cette opération.
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(J'aime utiliser
%_%
comme variable d’environnement de travail.)Tapez
SET /?
pour voir les autres pseudo-variables fournies par le processeur de commande.
Les commentaires de l'article valent également la peine d'être numérisés, par exemple celui-ci (via la machine WayBack, car les commentaires ont disparu d'anciens articles):
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Ceci couvre l'utilisation de% ~ dp0:
Si vous voulez savoir où réside le fichier de commandes:
%~dp0
%0
est le nom du fichier de commandes.~dp
vous donne le lecteur et le chemin de l'argument spécifié.
Ceci est équivalent au chemin du script:
%~dp0
Ceci utilise la syntaxe d'extension de paramètre de lot. Le paramètre 0 est toujours le script lui-même.
Si votre script est stocké sur C:\example\script.bat
, puis %~dp0
est évalué à C:\example\
.
ss64.com contient plus d'informations sur la syntaxe d'extension de paramètre. Voici l'extrait pertinent:
Vous pouvez obtenir la valeur de tout paramètre en utilisant un% suivi de sa position numérique sur la ligne de commande.
[...]
Lorsqu'un paramètre est utilisé pour fournir un nom de fichier, la syntaxe étendue suivante peut être appliquée:
[...]
% ~ d1 Développez% 1 en une lettre de lecteur uniquement - C:
[...]
% ~ p1 Développez% 1 sur un chemin uniquement, par ex.\utils\ceci inclut un\final qui peut être interprété comme un caractère d'échappement par certaines commandes.
[...]
Les modificateurs ci-dessus peuvent être combinés:
% ~ dp1 Développer% 1 en une lettre de lecteur et un chemin uniquement
[...]
Vous pouvez obtenir le nom du chemin du script batch avec% 0; des extensions de paramètres peuvent être appliquées à celui-ci afin que% ~ dp0 renvoie le lecteur et le chemin d'accès au script batch, par exemple. W:\scripts \
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%