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.
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.
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
é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.
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 :)
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();
}
cela fonctionne sur mon installation Windows XP Home, la manière Unix:
call notepad.exe &
est en fait assez facile avec cette option à la fin:
c:\start lot.bat-WindowStyle Hidden