Comment exécuter un fichier bat en arrière-plan à partir d'un autre fichier bat?

j'ai un script" setup " que j'exécute le matin et qui démarre tous les programmes dont j'ai besoin. Maintenant, certains d'entre eux ont besoin d'une configuration supplémentaire de l'environnement, donc je dois les envelopper dans de petits scripts BAT.

comment exécuter un tel script sur Windows XP en arrière-plan?

CALL env-script.bat l'exécute de manière synchrone, c'est-à-dire que le script de configuration ne peut continuer qu'après la fin de la commande dans le script env.

START/B env-script.bat il dirige une autre instance du CMD.exe dans le même prompt de commande, le laissant dans un État vraiment désordonné (je vois la sortie du CMD imbriqué.exe, le clavier est mort depuis un certain temps, le script n'est pas exécuté).

START/B CMD env-script.bat donne le même résultat. Aucun des drapeaux du CMD ne semble correspondre à ma facture.

81
demandé sur Aaron Digulla 2009-03-16 11:27:35

7 réponses

en fait, ce qui suit fonctionne très bien pour moi et crée de nouvelles fenêtres:

test.cmd:

@echo off
call "cmd /c start test2.cmd"
call "cmd /c start test3.cmd"
echo Foo
pause

test2.cmd

@echo off
echo Test 2
pause
exit

essai3.cmd

@echo off
echo Test 3
pause
exit

Combine cela avec des paramètres à start , comme /min , comme Moshe a souligné si vous ne voulez pas que les nouvelles fenêtres de frayer devant vous.

65
répondu Joey 2009-03-16 12:55:43

deux ans, mais pour être complet...

Standard, inline approche: (c'est à dire le comportement que vous obtenez lors de l'utilisation de & sous Linux)

START /B CMD /C CALL "foo.bat" [args [...]]

Notes: 1. CALL est jumelé avec le .bat file parce que c'est là où il va habituellement.. (C'est juste une extension de la CMD /C CALL "foo.bat" formulaire pour le rendre asynchrone. Habituellement, il est nécessaire d'obtenir correctement les codes de sortie, mais ce n'est pas un problème ici.); 2. Guillemets autour de l' .fichier bat est nécessaire seulement si le nom contient des espaces. (Le nom pourrait être un chemin, auquel cas il y a plus de chances que ce soit le cas.).

si vous ne voulez pas la sortie:

START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1

si vous voulez que la batte soit lancée sur une console indépendante: (i.e. une autre fenêtre)

START CMD /C CALL "foo.bat" [args [...]]

Si vous voulez que l'autre fenêtre traîner par la suite:

START CMD /K CALL "foo.bat" [args [...]]

Note: Ceci est en fait une mauvaise forme à moins que vous ayez des utilisateurs qui veulent spécifiquement utiliser la fenêtre ouverte comme une console normale. Si vous voulez juste la fenêtre à coller autour pour voir la sortie, il est mieux de mettre un PAUSE à la fin du fichier bat. Ou encore, ajouter ^& PAUSE après la ligne de commande:

START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE
127
répondu antak 2011-12-02 03:05:12

étant donné que START est le seul moyen d'exécuter quelque chose en arrière-plan à partir d'un script CMD, je vous recommande de continuer à l'utiliser. Au lieu du modificateur /B, essayez /MIN pour que la fenêtre nouvellement créée ne vous dérange pas. En outre, vous pouvez définir la priorité à quelque chose de plus bas avec /LOW ou /BELOWNORMAL, ce qui devrait améliorer la réactivité de votre système.

6
répondu Moshe 2009-03-16 08:59:29

autre que le terme "premier plan" / "background". Une autre façon de cacher une fenêtre en cours d'exécution est via vbscript, si is est toujours disponible dans votre système.

DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("yourcommand.exe", 0, TRUE)

l'appelle sth.vbs et l'appeler à partir de la batte,mis en tâche programmée, etc. PersonallyI vais désactiver vbs avec aucune hâte à tout système de Windows que je gère :)

3
répondu MeaCulpa 2012-04-25 04:23:35

créer une nouvelle application C# Windows et appeler cette méthode de main:

public static void RunBatchFile(string filename)
{
    Process process = new Process();

    process.StartInfo.FileName = filename;

    // suppress output (command window still gets created)
    process.StartInfo.Arguments = "> NULL";

    process.Start();
    process.WaitForExit();
}
0
répondu LegendLength 2009-03-16 09:43:39

cela fonctionne sur mon installation Windows XP Home, la manière Unix:

call notepad.exe & 
0
répondu MiiToo 2014-12-17 13:45:03

est en fait assez facile avec cette option à la fin:

c:\start lot.bat-WindowStyle Hidden

0
répondu user8832474 2017-10-25 15:08:12