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.

user2083037
la source

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.

Ansgar Wiechers
la source
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:?
)
Gaurav Kolarkar_InfoCepts
la source
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.

Sitri
la source
14

Vous devriez pouvoir utiliser le répertoire actuel

"% CD%" \ bin \ Iris.exe

Johan A.
la source
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)

AjV Jsy
la source
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