web-dev-qa-db-fra.com

Comment appeler un fichier batch d'un niveau supérieur à partir du répertoire actuel?

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?

11
Jason Moore

Vous pourriez simplement:

cd..
start Code.bat

Et cela démarrerait code.bat à partir de son propre répertoire

9
Monacraft

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:

  • C: \
    • Temp
      • Dossier 1
        • Dossier 2
          • Example.bat
        • Parent.bat

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.


Continuez le traitement par lots avec Parent.bat

"%~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.


Appelez Parent.bat comme un sous-programme

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.


Démarrer Parent.bat en tant que processus parallèle

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.


Appelez Parent.bat en tant que processus séparé

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.

17
Mofi

..\ est utilisé pour monter d'un niveau. votre cas nécessite deux niveaux supérieurs Essayez:

start ..\..\code.bat
10
DoubleM

essayez d'utiliser ceci:

start ../code.bat
3
Jarek606