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?

76
demandé sur Govind Parmar 2008-09-25 01:32:26

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

55
répondu Kev 2014-07-21 15:58:12

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\

138
répondu Landon 2017-06-06 08:12:48
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Source

1
répondu Alex. S. 2009-12-23 17:06:27