Comment puis-je exécuter un programme à partir d'un fichier de commandes sans laisser la console ouverte après le démarrage du programme?

184

Pour le moment, mon fichier batch ressemble à ceci:

myprogram.exe param1

Le programme démarre mais la fenêtre DOS reste ouverte. Comment puis-je le fermer?

Monsieur Dev
la source
3
Vous devriez probablement changer la réponse acceptée par celle que Marshall a publiée.
Rev1.0

Réponses:

163

Vous pouvez utiliser le mot-clé exit. Voici un exemple de l'un de mes fichiers batch:

start myProgram.exe param1
exit
Patrick Desjardins
la source
18
Notez que cela ne fera pas de bonnes choses si vous utilisez la console de manière interactive au lieu de simplement double-cliquer sur un fichier batch. En général, il est peu ou pas nécessaire de le mettre exitdans un fichier batch.
Joey
27
J'ai essayé cette commande dans Win8. Je ne sais pas si c'est différent, mais notez que vous devez lui fournir un titre de fenêtre comme premier paramètre. Quand je l'exécutais comme Patrick l'a décrit, il ouvrait simplement une nouvelle invite de commande avec "myProgram.exe" comme titre de la fenêtre:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher
9
Notez que si votre commande contient des espaces et que vous la mettez entre guillemets, vous devez ajouter un paramètre supplémentaire entre guillemets avant elle, car START interprète le premier paramètre cité comme nom de fenêtre et uniquement le deuxième paramètre suivant comme nom de commande.
David Balažic
259

Utilisez la commande de démarrage pour empêcher le fichier de commandes d'attendre le programme. N'oubliez pas de mettre un double guillemet vide devant le programme que vous souhaitez exécuter après "Démarrer". Par exemple, si vous souhaitez exécuter Visual Studio 2012 à partir d'une commande par lots:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

remarquez le double guillemet après le début.

Marshall
la source
55
@SharkAlley Le format approprié eststart <window name> <program name>
Kruug
5
C'est la bonne réponse. Merci, les doubles guillemets vides sont exactement ce dont j'avais besoin.
Richard
J'ai un script de sauvegarde que j'exécute chaque semaine et que je le modifierais très légèrement chaque semaine, en essayant de le faire a) fermer mon programme, b) sauvegarder mes données et c) redémarrer le programme et fermer l'invite de commande. Cela a finalement obtenu l'invite de commande pour se fermer (a également empêché ma prochaine sauvegarde de se déclencher, j'ai dû fermer cette invite de commande !!!).
NobleUplift
@NobleUplift: Pour moi, cela a fonctionné, .. ci-dessous est la ligne exacte, Démarrer "" "C: \ Program Files (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe" &
Xinus
53

Regardez la commande START, vous pouvez faire ceci:

START rest-of-your-program-name

Par exemple, ce fichier de commandes attendra la fermeture du bloc-notes:

@echo off
notepad c:\test.txt

Cependant, cela ne va pas:

@echo off
start notepad c:\test.txt
Lasse V. Karlsen
la source
31

De ma propre question :

start /b myProgram.exe params...

fonctionne si vous démarrez le programme à partir d'une session DOS existante.

Sinon, appelez un script vb

wscript.exe invis.vbs myProgram.exe %*

La méthode Windows Script Host Run () prend:

  • intWindowStyle: 0 signifie "fenêtres invisibles"
  • bWaitOnReturn: false signifie que votre premier script n'a pas besoin d'attendre que votre deuxième script se termine

Voici invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
VonC
la source
1
+1 Il doit y avoir un moyen plus simple, mais c'est la seule réponse qui a fonctionné pour moi.
DN
Merci - ce drapeau / b était exactement ce que je recherchais.
ap
21

C'est la seule chose qui a fonctionné pour moi lorsque j'ai essayé d'exécuter une classe java à partir d'un fichier batch:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

Vous pouvez personnaliser la startcommande comme vous le souhaitez pour votre projet, en suivant la syntaxe appropriée:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)
Zosimas
la source
18

Vous devriez essayer ceci. Il démarre le programme sans fenêtre. Il clignote en fait pendant une seconde mais disparaît assez rapidement.

start "name" /B myprogram.exe param1
Chris Dail
la source
4
L' "title"option est importante. Si le chemin du programme comprend des espaces, il doit être entouré de guillemets, nous devons donc en ajouter "title"pour éviter l'échec.
AD
1
Si vous fermez la fenêtre principale, le processus d'arrière-plan «myprogram.exe» se ferme également.
Aditya Gupta le
14

Comment résoudre le "problème d'espace" et les dépendances locales:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit
Gilco
la source
Ce n'est pas une réponse à la question
jeb
2
c'est vrai, mais je pense que cela donne une bonne solution qui résout aussi d'autres problèmes que j'ai rencontrés.
Gilco
2
C'était la solution pour moi. La fenêtre Dos s'ouvre mais se ferme à nouveau et la solution fonctionne. Je ne comprends pas les votes négatifs (j'ai voté pour)
JoeFox
Moi non plus. la solution fonctionne et résout le problème
Gilco
2

Des tas de réponses à cette question déjà, mais je publie ceci pour clarifier quelque chose d'important, bien que ce ne soit pas toujours le cas:

Start "C:\Program Files\someprog.exe"

Peut causer des problèmes dans certaines versions de Windows, car il Starts'attend en fait à ce que le premier jeu de guillemets soit un titre de Windows. Il est donc conseillé de commencer par citer un commentaire ou un commentaire vide:

Start "" "C:\Program Files\someprog.exe"

ou

Start "Window Title" "C:\Program Files\someprog.exe"
Gerhard
la source
0

Ma solution pour faire cela à partir de l'interface graphique:

  1. Créez un raccourci vers le programme que vous souhaitez exécuter;

  2. Modifiez les propriétés du raccourci;

  3. Remplacez le TARGETchamp par %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Modifiez le RUNchamp en minimisé.

Prêt! Voyez comment vous l'aimez ...

PS: les paramètres du programme peuvent être insérés entre les deux guillemets finaux; la PROGRAMNAMEchaîne peut être un nom de fichier, un chemin relatif ou un chemin absolu - si vous mettez un chemin absolu et effacez la lettre du lecteur et le point-virgule, cela fonctionnera dans une clé USB, quelle que soit la lettre que l'ordinateur hôte lui attribue. . (De plus, si vous placez le raccourci dans le même dossier et précédez le nom de fichier du programme PROGRAMNAMEavec la %CD%variable, les chemins correspondront toujours; la même astuce peut être utilisée dans le START INchamp).

Midas
la source
0

Si ce fichier de commandes est quelque chose que vous souhaitez exécuter comme prévu ou toujours; vous pouvez utiliser l'outil de planification de Windows et il ne s'ouvre pas dans une fenêtre lorsqu'il démarre le fichier de commandes.

Pour ouvrir Task Scheduler:

  • Démarrer -> Exécuter / Rechercher -> 'cmd'
  • Tapez taskschd.msc-> entrez

Du côté droit, cliquez Create Basic Tasket suivez les menus.

J'espère que cela t'aides.

Leustad
la source
0

Voici ma solution préférée. Il est tiré d'une réponse à une question similaire.

Utilisez un script VBS pour appeler le fichier de commandes:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Copiez les lignes ci-dessus dans un éditeur et enregistrez le fichier avec l'extension .VBS.

Ilitch
la source