Comment obtenir le répertoire du script qui a été exécuté et l'utiliser dans le fichier .cmd?Ligne de commande .cmd/.bat script, comment obtenir le répertoire du script en cours d'exécution
Répondre
Raymond Chen a quelques idées:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx
Cité ici dans son intégralité, car les archives MSDN ont tendance à être peu fiables:
Le plus simple est d'utiliser la
%CD%
pseudo-variable. Il se développe au répertoire de travail actuel .
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Bien sûr, répertoire de sauvegarde/restauration pourrait plus facilement avoir été fait avec
pushd
/popd
, mais ce n'est pas le point ici.)L'astuce
%CD%
est pratique même à partir de la ligne de commande. Par exemple, je souvent me trouver dans un répertoire où il ya un fichier que je veux fonctionner mais ... oh, je dois chdir à 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
%_%
comme ma variable d'environnement zéro.)type
SET /?
pour voir les autres pseudo-variables fournies par la commande processeur.
également les commentaires dans l'article valent bien le balayage 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ù vit le fichier batch:
%~dp0
%0
est le nom du fichier de traitement par lots.~dp
vous donne le lecteur et le chemin de l'argument spécifié.
Cela ne répond pas à la question. % CD% donne le répertoire courant, alors que ce qui a été demandé était le répertoire du script. – ketorin
** @ ketorin: ** Ceci ** répond ** à la question. % CD% changera si le script change de répertoire tout au long de son utilisation (pushd/cd/..) mais **% ~ dp0 ** ** NE changera PAS et pointera toujours vers l'emplacement du script. – Jay
-1 Je ne peux pas dire si cela répond à la question ou non. Pouvez-vous me montrer un exemple? –
Ceci est équivalent au chemin du script:
%~dp0
Il utilise la syntaxe d'extension des paramètres de traitement par lots. Le paramètre 0 est toujours le script lui-même.
Si votre script est stocké à C:\example\script.bat
, alors %~dp0
est évalué à C:\example\
.
ss64.com a plus d'informations sur la syntaxe d'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 peut alors être appliquée la syntaxe étendue suivante:
[...]
% ~ d1% 1 Expand à une lettre de lecteur uniquement - C:
[...]
% ~ p1 Expand% 1 à un chemin que par exemple \ utils \ ceci inclut un \ qui peut être interprété comme un caractère d'échappement par certaines commandes.
[...]
Les modificateurs ci-dessus peuvent être combinés:
% ~ DP1 Élargissez% 1 à une lettre de lecteur et le chemin que
[...]
Vous pouvez obtenir le chemin du script de lot lui-même avec% 0, les extensions de paramètres peuvent être appliquées à cela, ainsi% ~ dp0 retournera le lecteur et le chemin vers le script de lot, par exemple W: \ scripts \
Exactement ce dont j'avais besoin. Et j'ai lié cette anwser à mon blog, comme un rappel :) –
Je ne sais pas si c'est un bug/erreur dans le texte cité, mais dans mon script j'ai besoin de "% ~ d0" pour obtenir la lettre de lecteur! % ~ d1 est vide dans mon cas. – eftokay83
Dans mes yeux/situation c'est supérieur à la réponse acceptée.Si vous exécutez un script de ligne de commande "en tant qu'administrateur" (clic droit dessus), votre script sera exécuté à partir de Windows \ system32. La réponse acceptée ne vous donnera PAS l'emplacement du script, elle vous donnera à nouveau Windows \ system32. C'est à dire. CETTE réponse vous aide à corriger cela, vous commencez votre script avec cd% ~ dp0 –
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%
double possible de [? Comment obtenir le chemin du script batch sous Windows] (http://stackoverflow.com/questions/3827567/how- pour-obtenir-le-chemin-du-lot-script-dans-windows) – Celada