Ligne de commande.cmd/.Bat script, comment obtenir le répertoire du script en cours d'exécution
Comment Pouvez-vous obtenir le répertoire du script qui a été exécuté et l'utiliser dans le .fichier cmd?
3 réponses
Raymond Chen a quelques idées:
Http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx
Cité ici en entier parce que les archives MSDN ont tendance à être quelque peu peu fiables:
Le moyen le plus simple est d'utiliser la pseudo-variable
%CD%
. Il se développe à la répertoire de travail actuel.
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(bien sûr, répertoire save / restore pourrait plus facilement avoir été fait avec
pushd
/popd
, mais ce n'est pas le problème ici.)L'astuce
%CD%
est pratique même à partir de la ligne de commande. Par exemple, j' souvent je me retrouve dans un répertoire où il y a un fichier que je veux fonctionner sur mais... oh, j'ai besoin de chdir dans un autre répertoire dans l'ordre pour effectuer cette opération.
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(j'aime utiliser {[10] } comme variable d'environnement scratch.)
Tapez
SET /?
pour voir les autres pseudo-variables fournies par la commande processeur.
Aussi les commentaires dans l'article valent bien la peine d'être analysés par exemple celui-ci:
Http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Cela couvre l'utilisation de % ~ dp0:
Si vous voulez savoir où se trouve le fichier batch:
%~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
Cela utilise la syntaxe d'extension de paramètre batch. Le paramètre 0 est toujours le script lui-même.
Si votre script est stocké à C:\example\script.bat
, puis %~dp0
donne C:\example\
.
Ss64.com a plus d'informations sur la syntaxe de l'extension de paramètre. Voici l'extrait pertinent:
Vous pouvez obtenir la valeur de n'importe quel 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 exemple \utils\ Cela 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éveloppez %1 en une lettre de lecteur et chemin seulement
[...]
Vous pouvez obtenir le chemin du script batch lui-même avec %0, des extensions de paramètres peuvent être appliquées à cela, donc %~dp0 retournera le lecteur et le chemin du script batch, par exemple W:\scripts\