web-dev-qa-db-fra.com

Ligne de commande script .cmd / .bat, 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?

78
Brian R. Bondy

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é.

56
Kev

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 \

143
Landon
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Source

0
Alex. S.