Quel est le répertoire actuel dans un fichier batch?

511

Je veux créer quelques fichiers batch pour automatiser un programme.

Ma question est quand je crée le fichier batch, quel est le répertoire actuel? S'agit-il du répertoire où se trouve le fichier ou est-ce le même répertoire qui apparaît dans l'invite de commande, ou autre chose?

Aaron de Windt
la source

Réponses:

1027

Depuis votre fichier batch:

  • %cd%fait référence au répertoire de travail actuel (variable)
  • %~dp0 fait référence au chemin complet du répertoire du fichier batch (statique)
  • %~dpnx0et les %~f0deux font référence au chemin d'accès complet au répertoire de commandes et au nom de fichier (statique).

Voir aussi: Que signifie% ~ dp0 et comment cela fonctionne-t-il?

JRL
la source
5
@ Јοеу - %0pourrait donner le nom du sous-programme actuel, mais %~dp0donnera toujours le chemin complet du fichier de commandes en cours d'exécution.
dbenham
77
En fait, il semble que% ~ dp0 donne le chemin d'accès complet au répertoire dans lequel se trouve le fichier de commandes en cours d'exécution.% ~ Dpnx0 (qui est équivalent à% ~ f0) donne le chemin d'accès complet au fichier de commandes. Voir robvanderwoude.com/parameters.php pour plus de détails.
deadlydog
6
Voir aussi les bonnes réponses détaillées à une question similaire: Obtenez la liste des arguments passés dans le script batch Windows (.bat)
olibre
1
Malheureusement, lorsqu'il est exécuté en tant que processus à partir de .net% ~ dp0, c'est le répertoire de travail et non le répertoire des fichiers batch, que j'ai trouvé à la dure.
trampster
3
À titre d'exemple plus explicite, lorsque vous cliquez avec le bouton droit sur un .cmdfichier et exécutez en tant qu'administrateur, %cd%donne C:\WINDOWS\system32et %~dp0donne le répertoire de fichiers batch avec une barre oblique.
icc97
25

Il s'agit généralement du répertoire à partir duquel le fichier de commandes est démarré, mais si vous démarrez le fichier de commandes à partir d'un raccourci, un répertoire de démarrage différent peut être indiqué. De plus, lorsque vous êtes dans cmd et que votre répertoire actuel l'est c:\dir3, vous pouvez toujours démarrer le fichier de commandes en utilisant le c:\dir1\dir2\batch.batcas échéant, le répertoire actuel le sera c:\dir3.

GolezTrol
la source
11

Dans un fichier batch,% cd% est la commande la plus utilisée pour le répertoire courant, bien que vous puissiez définir votre propre variable:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Supposons donc que vous vouliez ouvrir Myprog.exe. S'il était dans le même dossier, vous utiliseriez la commande:

start %mypath%\Myprog.exe

Cela ouvrirait Myprog à partir du dossier actuel.

L'autre option est de créer un répertoire en C: appelé AutomatePrograms. Ensuite, vous transférez vos fichiers dans ce dossier, puis vous pouvez les ouvrir à l'aide de la commande suivante:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
J. Bond
la source
1
Comme indiqué dans la première réponse ici, %cd%est variable, donc l'exécution du fichier de commandes à partir de l'Explorateur Windows en tant qu'administrateur donnera C:\WINDOWS\system32ce qui n'est certainement pas ce que vous voulez. %~dp0est plus cohérent.
icc97
6

Supposons que vous ouvriez un fichier dans votre répertoire actuel. La commande serait:

 start %cd%\filename.filetype

J'espère avoir répondu à votre question.

Ping plusieurs fois
la source
5

Il s'agit du répertoire à partir duquel vous exécutez la commande pour exécuter votre fichier de commandes.

Comme mentionné dans les réponses ci-dessus, vous pouvez ajouter la commande ci-dessous à votre script pour vérifier:

> set current_dir=%cd%
> echo %current_dir%  
anuj0901
la source
4

Il s'agit du répertoire à partir duquel vous démarrez le fichier de commandes. Par exemple, si votre lot est dedans c:\dir1\dir2et que vous le faites cd c:\dir3, puis exécutez le lot, le répertoire courant sera c:\dir3.

icyrock.com
la source
0

Juste mes 2 cents. La commande suivante échoue si elle est appelée à partir d'un fichier de commandes (Windows 7) placé sur clé USB:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Mais cela fait l'affaire:

xcopy /s /e /i %~dp0Ala C:\KS\Ala
Darek Adamkiewicz
la source
C'est le commutateur que je cherchais pour déterminer le chemin du répertoire parent de mon fichier bat sans ce nom de fichier batch:%~dp0
Ammar Mohammad