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.
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
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
Vous pouvez également faire
Pushd "%~dp0"
Qui prend également en compte l'exécution à partir d'un chemin unc.
Essayez dans yourbatch
set "batchisin=%~dp0"
Qui devrait définir la variable à l'emplacement de votre lot.