web-dev-qa-db-fra.com

Comment créer un fichier batch Windows qui ne montre pas l'invite de commande lorsqu'il est exécuté?

J'ai installé une gemme Ruby appelée Redcar, lancée à partir de la ligne de commande. Lorsqu'il s'exécute, il vole le shell jusqu'à ce qu'il se termine. Je dois donc créer une nouvelle fenêtre du shell pour continuer à effectuer le travail en ligne de commande. Le shell que j'utilise est le shell GITBash de MySysGit.

J'ai trouvé un fichier Redcar.bat destiné à lancer Redcar comme raccourci, je suppose, mais je ne souhaite pas que la fenêtre d'invite de commande supplémentaire s'ouvre à chaque lancement du fichier BAT.

Comment puis-je simplement exécuter la BAT sans voir l'invite?

54
Jake

Vous ne pouvez pas - exécuter un fichier de commandes avec l'invite de commandes intégrée laissera une fenêtre ouverte jusqu'à la fermeture du fichier de commandes.

Ce que vous pouvez faites, prenez des mesures pour vous assurer que le fichier de commandes se ferme le plus rapidement possible. Si possible, modifiez le fichier de commandes pour exécuter n'importe quel programme avec la commande start. Par défaut, start est renvoyé immédiatement sans attendre la fin du programme. Le fichier de commandes continuera donc à s'exécuter et, vraisemblablement, à se terminer immédiatement. Ajoutez à cela la modification de votre raccourci pour exécuter le fichier de commandes minimisé et vous ne verrez que la barre des tâches clignoter sans même voir une fenêtre à l'écran.

Un inconvénient à cela est que si vous exécutez un programme en mode console, ce qui correspond à de nombreux interpréteurs de script, le fichier de commandes attendra la fin du programme et l'utilisation de start engendrera une nouvelle fenêtre de console. Dans ce cas, vous devez exécuter la version Windows de l'interpréteur au lieu de la version basée sur la console - aucune start n'est nécessaire. Pour Perl, vous exécuteriez wperl.exe au lieu de Perl.exe. Pour Python, c'est pythonw.exe au lieu de python.exe. L'ancienne distribution win32 Ruby que j'ai téléchargée a rubyw.exe, ce qui devrait faire la même chose.

Une dernière possibilité consiste à utiliser un outil tiers pour exécuter la commande Invite avec une fenêtre masquée. J'ai entendu parler de telles choses, mais je ne les ai jamais utilisées. Je ne connais donc rien de particulier à vous signaler.

37
afrazier

Je pense que c'est la solution la plus simple et la plus courte pour exécuter un fichier de commandes sans ouvrir la fenêtre DOS. Cela peut être très gênant lorsque vous souhaitez planifier l'exécution périodique d'un ensemble de commandes. La fenêtre DOS ne cesse de s'afficher. Voici la solution. . Utilisez un script VB pour appeler le fichier de commandes ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Copiez les lignes ci-dessus dans un éditeur et enregistrez le fichier avec l’extension .VBS. Modifiez le nom du fichier .BAT et son chemin en conséquence. Ensuite, lancez le fichier .vbs et la magie opère!

20
indago

Vous pouvez exécuter un autre fichier de commandes avec START/MIN CMD.EXE/C mybatchfile.bat à partir de la commande Invite.

De l’extérieur, la fenêtre de la console cmd apparaîtra, mais pour éviter cela, vous pouvez créer un raccourci fichier avec propriétés modifié en start minimized .

8
vhanla

Pour ce faire, utilisez le programme Bat To Exe Converter pour convertir votre fichier de commandes en fichier exécutable.

Lors de la conversion en un exécutable, vous trouverez une option pour exécuter votre fichier en tant que Application invisible dans la section Visibilité. Ainsi, lorsque vous l'exécutez, il s'exécutera sans fenêtre.

 Bat to exe

5

En continuant sur la réponse de Dennis Williamson, vous pouvez éditer le fichier de commandes et ajouter (préfixer) START /B à la commande que vous exécutez.

Par exemple, j'ai un fichier de commandes qui exécute PuTTY et avait le même problème (extra CMD), donc voici comment je l'ai écrit:

 @ ECHO OFF 
 START/B PuTTY.exe -load nom_de_mon_config_fichier

Cela a fonctionné parfaitement.

4
Adonis Darwish

Essayez ceci:

START /B batchfile

note ajoutée par barlop

début /? dit de/B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.
4
Dennis Williamson

Je ne comprends pas bien votre problème, mais avec certains de mes fichiers de commandes, j’utilise un «dumy» dont le seul but est de lancer le fichier de commandes principal.

Donc, GO.BAT aura:

cmd /c go2.bat %1 %2 %3
exit

La sortie ferme la fenêtre d'invite de commande qui resterait autrement ouverte.

Et GO2.BAT aura le contenu du fichier de commandes que je souhaite.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...
3
therube

Vous pouvez utiliser RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
3
Jens A. Koch

Si vous ne souhaitez toujours pas afficher la fenêtre de la console, here est une solution de stackoverflow qui a fonctionné pour moi (dans mon cas, je n'ai rien mis dans le registre, mais là où j'avais besoin).

1
raviolli

Il suffit de placer le commutateur/b en face du chemin. Il n'ouvrira pas la deuxième commande Invite.

0
Jesse

La réponse d'Indago a été la meilleure solution pour moi jusqu'à présent. Le fichier VBS me permet d'exécuter la fonctionnalité du lot via le script, empêchant ainsi la fenêtre CMD de se produire. Il y a cependant quelques mises en garde:

  1. Si votre lot nécessite des droits d'administrateur, créez ou utilisez un lot existant qui appelle VBS et exécutez ce lot en tant qu'administrateur.

  2. En l'absence de visibiity, il peut être difficile de déterminer si ce que vous essayez de faire fonctionne réellement comme vous le souhaitez.

Cela dit, je mettrais d’abord une petite maquette/unité de test pour s’assurer que tout fonctionne comme vous le souhaitez, avant de l’intégrer.

0
kayleeFrye_onDeck

J'ai utilisé cmdow dans le passé, et il semble avoir fonctionné pour ce que je veux.

Vous voudrez probablement utiliser l’une des options suivantes: CMDOW [window] /HID

/HID masque la fenêtre spécifiée

CMDOW [window] /END

/END ferme la fenêtre spécifiée

CMDOW [window] /CLS

/CLS a poliment demandé à la fenêtre de se fermer (certaines fenêtres peuvent ouvrir une boîte de dialogue)

J'espère que cela t'aides.

0
sonrad10