web-dev-qa-db-fra.com

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

J'ai un fichier de commandes que je compte distribuer à nos clients pour exécuter une tâche logicielle.

Nous les distribuons sous forme de dossier ou .Zip avec les fichiers qu’ils contiennent. À l'intérieur, se trouvent les fichiers de commandes et un autre dossier contenant les fichiers nécessaires à l'exécution du traitement.

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

Ainsi, par exemple: s’ils ont le dossier maître sur le bureau et s’ils l’exécutent, il doit alors ressembler à quelque chose comme "C:\Users\Username\Desktop" pour fonctionner. Vous auriez le CD de lot à cet endroit.

Mais que se passe-t-il si elles sont extraites de documents? Je ne connais pas le nom d'utilisateur, je dois donc trouver le lot. N'importe quel code et/ou instruction serait génial.

67
Ryan Barber

Il n'est pas nécessaire de savoir où sont les fichiers, car lorsque vous lancez un fichier bat, le répertoire de travail est le répertoire dans lequel il a été lancé (le "dossier principal"). Par conséquent, si vous avez cette structure:

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

Et l'utilisateur lance le fichier "mybat.bat", le répertoire de travail est ".\Mes documents\dossier", 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 dans lequel la batte a été lancée est stocké dans l'argument 0. Ensuite, si vous souhaitez connaître le répertoire de travail sur n'importe quel ordinateur, vous pouvez procéder comme suit:

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

ElektroStudios répond est un peu trompeur.

"lorsque vous lancez un fichier bat, le répertoire de travail est le répertoire où il a été lancé" Ceci 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 en cours ne change pas.

Ainsi, dans votre script, il vaut mieux 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 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
55
Henning

Vous pouvez aussi faire

 Pushd "%~dp0"

Ce qui prend également en considération un chemin d'accès non planifié.

44
Matt Williamson

Essayez dans votre lot

set "batchisin=%~dp0"

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

6
Magoo