J'utilise un fichier batch dans folder1/folder2/file.bat
Il y a un fichier batch dans le dossier parent folder1
, que je souhaite ouvrir via file.bat
J'ai essayé d'utiliser:
start ..\..\code.bat
Mais cela se traduit par un message d'erreur, car le fichier est introuvable.
Des idées?
Vous pourriez simplement:
cd..
start Code.bat
Et cela démarrerait code.bat à partir de son propre répertoire
Je veux mieux expliquer ce qui devrait être utilisé avec un exemple car les réponses publiées jusqu'à présent ne fonctionnent qu'avec le répertoire de travail actuel étant le répertoire contenant le fichier de commandes file.bat
.
Il existe une structure de répertoires comme suit:
Le répertoire de travail actuel est C:\Temp lors de l'exécution de Example.bat
soit avec
"Folder 1\Folder 2\Example.bat"
ou avec
"C:\Temp\Folder 1\Folder 2\Example.bat"
Le fichier batch Parent.bat
contient par exemple:
echo %0 is active.
pause
Le fichier batch Example.bat
contient déjà:
@echo off
echo Calling Parent.bat ...
rem How to run Parent.bat here?
echo %0 is active.
pause
Les solutions qui fonctionnent vraiment dans ce scénario avec le répertoire de travail actuel étant un répertoire différent de celui contenant Example.bat
sont les suivants.
"%~dp0..\Parent.bat"
%0
fait référence à l'argument 0 lors de l'exécution du fichier batch qui est toujours le nom du fichier batch tel que spécifié dans le processus parent lors du démarrage du fichier batch.
Mais le lecteur et le chemin du fichier batch sans guillemets sont recherchés. Par conséquent, l'expression %~dp0
est utilisé pour obtenir C:\Temp\Folder 1\Folder 2 \ à partir de l'argument 0.
Sur ce chemin, la chaîne ..\Parent.bat est ajoutée, ainsi que le nouveau nom de fichier entier
C:\Temp\Dossier 1\Dossier 2\..\Parent.bat est placé entre guillemets à cause des espaces.
Il n'y a pas de retour à Example.bat
après le traitement de Parent.bat
fini.
call "%~dp0..\Parent.bat"
La commande appel entraîne l'exécution du fichier de commandes Parent.bat
dans le même processus de commande (fenêtre de console) avec arrêt de l'exécution de Example.bat
jusqu'à Parent.bat
fini.
L'exécution par lots se poursuit sur la ligne suivante dans Example.bat
après le traitement de Parent.bat
fini.
Exception:Parent.bat
contient la commande exit
sans interrupteur /B
car cela entraîne une sortie immédiate de l'interpréteur de ligne de commande cmd.exe
En traitement Example.bat
et Parent.bat
.
Exécutez call /?
ou help call
dans une fenêtre d'invite de commandes pour une courte aide sur la commande appel.
start "Parent Batch" "%~dp0..\Parent.bat"
La commande démarrer sans aucun paramètre à l'exception du titre facultatif entraîne l'exécution du fichier de commandes Parent.bat
par un processus de commande distinct dans une fenêtre de console distincte sans interrompre l'exécution de Example.bat
.
Par conséquent, les deux fichiers de commandes s'exécutent en même temps (plus ou moins).
Remarque:
Commande début interprète la première chaîne entre guillemets doubles comme titre. Par conséquent, il est nécessaire de définir explicitement un titre entre guillemets lorsque le fichier de commandes ou l'application à démarrer, ou tout argument du fichier de commandes/de l'application démarré doit être spécifié entre guillemets en raison de 1 ou plusieurs espaces.
Exécutez start /?
ou help start
dans une fenêtre d'invite de commandes pour une courte aide sur la commande start.
start "Parent Batch" /wait "%~dp0..\Parent.bat"
Commande démarrer avec le paramètre facultatif /wait
entraîne l'exécution du fichier batch/de l'application démarrée en tant que processus séparé (fenêtre de console supplémentaire pour un fichier batch ou une application console), mais en interrompant l'exécution du fichier batch actuel jusqu'au processus démarré (application Windows ou fichier batch/application console) exécuté dans une nouvelle fenêtre de console) se termine.
..\
est utilisé pour monter d'un niveau. votre cas nécessite deux niveaux supérieurs Essayez:
start ..\..\code.bat
essayez d'utiliser ceci:
start ../code.bat