Comment trouver le répertoire actuel d’un fichier de commandes, puis l’utiliser pour le chemin d’access?

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

Nous les dissortingbuons sous forme de dossier ou de .zip avec les fichiers à l’intérieur. À l’intérieur, il y a les fichiers de commandes et un autre dossier contenant les fichiers nécessaires à l’exécution du lot.

Normalement, lorsque vous créez un lot, vous tapez le chemin d’access aux fichiers. Mais je ne saurai pas où sont les fichiers. Les fichiers seront toujours conservés dans le dossier principal, mais le lot doit rechercher ce dossier pour exécuter les fichiers.

Ainsi, par exemple: s’ils ont le dossier principal sur le bureau et qu’ils l’exécutent, cela devrait ressembler à "C:\Users\Username\Desktop" à exécuter. Vous auriez le CD de lot à cet endroit.

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 trouver le lot. Tout code et / ou instructions serait génial.

Il n’y a pas besoin de savoir où sont 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 principal”), donc si vous avez cette structure:

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

Et l’utilisateur lance le “mybat.bat”, 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 chauve-souris a été lancée est stocké sur l’argument 0. Si vous voulez connaître le répertoire de travail sur n’importe quel ordinateur, vous pouvez:

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

La réponse ElektroStudios est un peu trompeuse.

“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

Notez également que% ~ dp0 se terminera par une barre oblique inverse lorsque le script actuel ne se trouve pas dans le répertoire de travail en cours. Ainsi, si vous avez besoin du nom de 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 

Vous pouvez aussi faire

  Pushd "%~dp0" 

Ce qui prend également en compte un chemin unc en considération.

Essayez dans votre lot

 set "batchisin=%~dp0" 

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