web-dev-qa-db-fra.com

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?

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?

164
Mister Dev

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

start myProgram.exe param1
exit
148
Patrick Desjardins

Utilisez la commande de démarrage pour empêcher le fichier de commandes d’attendre le programme. Rappelez-vous simplement de mettre une citation double 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 batch:

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

remarquez la double citation après le début. 

218
Marshall

Regardez la commande START, vous pouvez faire ceci:

START rest-of-your-program-name

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

@echo off
notepad c:\test.txt

Cependant, ceci ne:

@echo off
start notepad c:\test.txt

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 la fin de votre second script

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
29
VonC

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

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

Vous pouvez personnaliser la commande start à votre guise pour votre projet, en respectant 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)
18
Zosimas

Tu devrais essayer ça. Il commence le programme sans fenêtre. En fait, il clignote une seconde mais disparaît assez rapidement.

start "name" /B myprogram.exe param1
18
Chris Dail

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
12
Gilco

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

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

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

  3. Définissez le champ TARGET sur %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Définissez le champ RUN sur minimized.

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

PS: les paramètres du programme peuvent être insérés entre les deux guillemets finaux; La chaîne PROGRAMNAME peut être un nom de fichier, un chemin relatif ou un chemin absolu. Si vous définissez un chemin absolu et effacez la lettre de lecteur et le point-virgule, cela fonctionnera avec une clé USB quelle que soit la lettre que l'ordinateur hôte lui attribue. .. (si vous placez le raccourci dans le même dossier et faites précéder le nom du fichier du programme dans PROGRAMNAME par la variable %CD%, les chemins correspondront toujours; le même truc peut être utilisé dans le champ START IN).

0
Midas

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

Pour ouvrir Task Scheduler:

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

Du côté droit, cliquez sur Create Basic Task et suivez les menus.

J'espère que cela t'aides.

0
Leustad

Voici ma solution préférée. Il est pris d'un answer à 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.

0
Ilyich

J'avais ce problème et ce qui suit a fonctionné pour moi:

run myprogram.exe param1
0
nikc