87 votes

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?

156voto

Landon Points 3355

C'est l'équivalent du chemin d'accès du script:

%~dp0

Il utilise le lot paramètre d'extension de la syntaxe. Paramètre 0 est toujours le script lui-même.

Si votre script est stocké à l' C:\example\script.bat, alors %~dp0 évalue C:\example\.

ss64.com a plus d'informations sur le paramètre d'extension de la syntaxe. Voici l'extrait pertinent:

Vous pouvez obtenir la valeur d'un paramètre à l'aide d'un %, suivie par la position numérique sur la ligne de commande.

[...]

Lorsqu'un paramètre est utilisé pour fournir un nom de fichier puis dans le suivant la syntaxe suivante peut être appliquée:

[...]

%~d1 Étendre %1 lettre de Lecteur uniquement - C:

[...]

%~p1 Étendre %1 à un Chemin d'accès 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ées:

%~dp1 Étendre %1 à une lettre de lecteur et le chemin d'accès uniquement

[...]

Vous pouvez obtenir le chemin d'accès du script de traitement par lot lui-même avec %0, le paramètre extensions peuvent être appliquées à cette sorte %~dp0 sera de retour le Lecteur et le Chemin d'accès au script batch par exemple W:\scripts\

60voto

Kev Points 60744

Raymond Chen a quelques idées:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx

Cité ici en plein MSDN archives ont tendance à être peu fiables:

Le plus simple est d'utiliser l' %CD% pseudo-variable. Il s'étend à l' répertoire de travail courant.

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(Bien sûr, le répertoire de sauvegarde/restauration pourraient plus facilement été fait avec l' pushd/popd, mais ce n'est pas le point ici.)

L' %CD% astuce est utile même à partir de la ligne de commande. Par exemple, j' je me retrouve souvent dans un répertoire où il y a un fichier que je veux fonctionner, 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 %_% que mes de zéro variable d'environnement.)

Type SET /? voir les autres pseudo-variables fournies par la commande le processeur.

Aussi les commentaires de l'article sont bien la peine de numérisation par exemple celui-ci:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Ce couvre l'utilisation de l' %~dp0:

Si vous voulez savoir où le fichier de commandes de vie: %~dp0

%0 est le nom du fichier de commandes. ~dp vous donne le lecteur et le chemin de l'argument spécifié.

-1voto

Alex. S. Points 16684
 for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%
 

La source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X