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

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

Nous les distribuons en tant que 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 lot.

Normalement, lorsque vous créez un lot, vous tapez le chemin d'accès où se trouvent les fichiers. Mais je ne saurai pas où sont les fichiers. Les fichiers seront toujours conservés dans le dossier maître, mais j'ai besoin que le lot trouve ce dossier pour exécuter le fichier.

Ainsi, par exemple: Si ils ont le maître dossier sur le bureau et ils l'exécutent, il faudrait quelque chose comme "C:UsersUsernameDesktop" pour exécuter. Vous auriez le CD de lot à cet emplacement.

Mais que se passe-t-il s'ils l'exécutent à partir de documents? Je ne connais pas le nom d'utilisateur, donc je dois en quelque sorte que le lot trouve ceci. Tout code et / ou instructions serait génial.

60
demandé sur ROMANIA_engineer 2013-04-27 21:50:50

4 réponses

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 le répertoire où il a été lancé (le "dossier maître"), donc si vous avez cette structure:

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

Et l'utilisateur démarre le "mybat.chauve-souris", le répertoire de travail est ".\MyDocuments \ folder", il vous suffit donc d'é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

Quoi Qu'il en soit, le répertoire de travail est stocké dans la variable " % CD%", et le répertoire où la bat a été lancée est stocké sur l'argument 0. Alors si vous voulez connaître le répertoire de travail sur n'importe quel ordinateur que vous pouvez faire:

@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit
80
répondu ElektroStudios 2015-05-16 21:12:21

Elektrostudios réponse est un peu trompeur.

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

Toutefois, si le script est appelé à partir d'un autre script à l'aide de la commande CALL, le répertoire de travail actuel ne change pas.

Ainsi, dans votre script, il est préférable d'utiliser % ~ dp0subfolder \ file1.txt

Veuillez également noter que % ~ dp0 se terminera par une barre oblique inverse lorsque le script actuel ne se trouve pas dans le répertoire de travail actuel. Ainsi, si vous avez besoin du nom du répertoire sans barre oblique inverse, 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
49
répondu Henning 2013-10-29 17:29:02

Vous pouvez également faire

 Pushd "%~dp0"

Qui prend également en compte l'exécution à partir d'un chemin unc.

38
répondu Matt Williamson 2013-04-27 18:07:08

Essayez dans yourbatch

set "batchisin=%~dp0"

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

6
répondu Magoo 2013-04-27 17:54:46