J'ai un fichier de commandes qui appelle d'autres fichiers de commandes comme celui-ci:
e:\foo\master.bat
a le contenu:
call e:\bar\run1.bat
et e:\bar\run1.bat
a le contenu
app1.exe
le problème est que lorsque j'exécute le master.bat
app1.exe
ne sera pas exécuté, car il s'attendra à ce qu'il soit dans le e:\foo
répertoire au lieu d'être dans e:\bar
répertoire
Vous ne savez pas où se trouve app1.exe.
S'il partage le dossier avec run1.bat, changez run1.bat
soit
@Echo off
Pushd "%~dp0"
app1.exe
popd
ou
@Echo off
"%~dp0app1.exe"
%0
fait référence au lot en cours d'exécution et au modificateur ~dp
retourne le lecteur et le chemin (avec une barre oblique inverse.)
La réponse à votre question peut être tirée d'une question similaire sur Stack Overflow.
Quel est le répertoire courant dans un fichier batch?
En utilisant les variables mentionnées ici, vous pouvez mettre à jour run1.bat pour appeler app1.exe avec la ligne suivante: %~dp0app1.exe
. (La variable% ~ dp0 comprend une barre oblique de fin.) Cela indiquera au fichier de commandes d'exécuter l'exécutable à partir de l'emplacement du fichier de commandes actuel.