chemin relatif dans le script BAT


130

Voici mon propre dossier de programme sur ma clé USB:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

Je voudrais utiliser run.batpour commencer Iris.exe

Je ne peux pas utiliser ceci: F:/Program/bin/Iris.execomme un raccourci, car parfois il ne se connecte pas en tant que lecteur F:( par exemple E: ou G:)

Que dois-je écrire dans le fichier bat pour fonctionner quelle que soit la lettre du lecteur?

J'ai essayé ceci dans le fichier BAT:

"\bin\Iris.exe"

Mais ça ne marche pas.

Réponses:


275

Utilisez ceci dans votre fichier batch:

%~dp0\bin\Iris.exe

%~dp0 résout le chemin complet du dossier dans lequel réside le script batch.


7
En fait, cela se résout à quelque chose comme C:\myDir\\bin\Iris.exe(notez la double barre oblique inverse). Cela fonctionne toujours mais en laissant de côté la barre oblique inverse avant que bin semble être "plus propre"? -> %~dp0bin\Iris.exe.
mozzbozz

8
@mozzbozz Si vous pouvez garantir qu'il y %~dp0aura toujours une barre oblique inverse à la fin, les deux instructions fonctionneront. Sinon, celui avec la barre oblique inverse supplémentaire est la variante la plus sûre.
Ansgar Wiechers

4
Ok, c'est un point. Je n'ai testé cela que sur deux machines Windows 7 différentes, cela pourrait être différent ailleurs (XP, Vista ou Windwos 8 -> Je ne sais pas mais: la logique Microsoft et je n'ai pas trouvé de documentation à ce sujet;)). Cependant, j'ai trouvé que je devais mettre des guillemets autour ( "%~dp0\bin\Iris.exe") car le chemin contenait un espace :) Juste pour être vraiment sûr que cela fonctionne sur tous les ordinateurs.
mozzbozz

1
vous pouvez vous assurer qu'il y a une barre oblique inverse avec SET "scriptdir=%~dp0"et sur la ligne suivante IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". J'ai vu des incidents où une double barre oblique inverse au milieu du chemin brise le logiciel.
LogicDaemon

40

Vous pouvez obtenir toutes les propriétés de fichier requises en utilisant le code ci-dessous:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)

24

J'ai trouvé que %CD%donne le chemin à partir duquel le script a été appelé et non le chemin du script, cependant, %~dp0donnera le chemin du script lui-même.


14

Vous devriez pouvoir utiliser le répertoire actuel

"% CD%" \ bin \ Iris.exe


1
Cela échoue lorsque le répertoire actuel n'est pas Program, cela se produira lorsque vous double-cliquez sur run.batdans l'explorateur. %CD%est le répertoire courant %~dp0est le répertoire du fichier batch lui
jeb

5

soit bin\Iris.exe (pas de barre oblique - car cela signifie commencer directement à partir de la racine)
ou \Program\bin\Iris.exe(chemin complet)


1
bin \ Iris.exe cela ne fonctionne pas :( Je n'aime pas utiliser root, parce qu'un jour je vais peut-être déplacer ce répertoire vers un autre emplacement. Et si je demande au système d'exploitation le chemin absolu actuel? et j'utiliserai que pour démarrer exe dans le bac?
user2083037

J'ai supposé que le lecteur actuel serait le lecteur de la clé USB, et le dossier actuel serait \Program- n'est-ce pas le cas? Vous pouvez montrer cela avec une simple cdcommande dans la ligne avant d'essayer d'exécuter le .exe
AjV Jsy

Le simple fait d'utiliser un chemin relatif ne fonctionnera pas nécessairement. Le chemin sera relatif au répertoire de travail actuel, qui peut être différent du répertoire parent de run.bat.
Ansgar Wiechers
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.