70 votes

Comment puis-je trouver le répertoire actuel d'un fichier batch, puis l'utiliser pour le chemin ?

Je suis assez novice en matière de fichiers batch.

J'ai un fichier batch que j'ai l'intention de distribuer à nos clients pour exécuter une tâche logicielle.

Nous les distribuons sous forme de dossier ou .zip avec les fichiers à l'intérieur. A l'intérieur, il y a les fichiers batch et un autre dossier avec les fichiers nécessaires pour exécuter le batch.

Normalement, lorsque vous faites un lot, vous tapez le chemin où se trouvent les fichiers. Mais je ne saurai pas où se trouvent les fichiers. Les fichiers seront toujours conservés dans le dossier principal, mais je dois faire en sorte que le batch trouve ce dossier pour exécuter les fichiers.

Donc, par exemple : S'ils ont le dossier principal sur le bureau et qu'ils l'exécutent, cela devrait être quelque chose du genre "C:\Users\Username\Desktop" pour s'exécuter. Vous auriez le CD batch à cet endroit.

Mais que se passe-t-il s'ils l'exécutent à partir de documents ? Je ne connais pas le nom d'utilisateur et je dois donc faire en sorte que le lot le trouve. Je suis désolé pour ce long message. Un code et/ou des instructions seraient les bienvenus. Merci d'avance à tous !

84voto

ElektroStudios Points 3147

Il n'est pas nécessaire de savoir où se trouvent les fichiers car lorsque vous lancez un fichier bat, le répertoire de travail est celui où il a été lancé (le "dossier principal"), donc si vous avez cette structure :

.\mydocuments\folder\mybat.bat
.\mydocuments\folder\subfolder\file.txt

Et l'utilisateur lance "mybat.bat", le répertoire de travail est ". \mydocuments\folder " afin que vous n'ayez qu'à écrire le nom du sous-dossier dans votre script :

@Echo OFF
REM Do anything with ".\Subfolder\File1.txt"
PUSHD ".\Subfolder"
Type "File1.txt"
Pause&Exit

De toute façon, le répertoire de travail est stocké dans la variable "%CD%", et le répertoire où la batte a été lancée est stocké dans l'argument 0, donc si vous voulez connaître le répertoire de travail de n'importe quel ordinateur, vous pouvez le faire :

@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit

60voto

Henning Points 141

La réponse d'ElektroStudios est un peu trompeuse.

"quand vous lancez un fichier bat, le répertoire de travail est celui où il a été lancé". Ceci est vrai si l'utilisateur clique sur le fichier batch dans l'explorateur.

Cependant, si le script est appelé à partir d'un autre script en utilisant la commande CALL, le répertoire de travail courant ne change pas.

Ainsi, à l'intérieur de votre script, il est préférable d'utiliser %~dp0subfolder \file1.txt

Veuillez également noter que %~dp0 se terminera par un backslash lorsque le script courant n'est pas dans le répertoire de travail actuel. Ainsi, si vous avez besoin du nom du répertoire sans backslash de fin, vous pouvez utiliser quelque chose comme

call :GET_THIS_DIR
echo I am here: %THIS_DIR%
goto :EOF

:GET_THIS_DIR
pushd %~dp0
set THIS_DIR=%CD%
popd
goto :EOF

46voto

Matt Williamson Points 3841

Vous pouvez également faire

 Pushd "%~dp0"

Ce qui prend aussi en compte le fait de courir à partir d'un chemin non tracé.

7voto

Magoo Points 22274

Essayez dans votre lot

set "batchisin=%~dp0"

qui devrait définir la variable à l'emplacement de votre lot.

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