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

58

J'ai installé une gemme rubis appelée Redcar, lancée à partir de la ligne de commande. Quand il fonctionne, il vole le shell jusqu’à ce qu’il se termine, je dois donc créer une nouvelle fenêtre de shell pour continuer à faire du 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 en tant que 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?

Jake
la source
1
J'aimerais connaître la réponse à cette +1 pour une bonne question.
Supercereal
@Kyle une question similaire a été posée avant superuser.com/questions/191149/how-to-execute-cmd-exe-silently mentionne HSTART et mentionne brièvement qu'un fichier VBS peut également le lancer
barlop le
Pouvez-vous mettre à jour votre réponse sélectionnée? Est-il possible et très simple de savoir comment .. fichier batch: ligne 1: set var1=hello.txtligne 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown
Utilisez simplement ::ou @REM. Source: superuser.com/a/843754/101936
PHPst

Réponses:

38

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 faire est de prendre des mesures pour vous assurer que le fichier de commandes se termine le plus rapidement possible. Si possible, modifiez le fichier de commandes pour exécuter le programme avec la startcommande. Par défaut, startretourne immédiatement sans attendre que le programme se termine. 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ètes de script, le fichier de commandes attendra la fin du programme et startgénérera une nouvelle fenêtre de console. Dans ce cas, vous devez exécuter la version de l'interpréteur basée sur Windows au lieu de celle basée sur la console - startinutile. Pour Perl, vous courriez wperl.exeau lieu de perl.exe. Pour Python, c'est au pythonw.exelieu de python.exe. L'ancienne distribution Win32 Ruby que j'ai téléchargée a rubyw.exe, qui devrait faire la même chose.

Une dernière possibilité consiste à utiliser un outil tiers pour exécuter l'invite de commande 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.

afrazier
la source
Merci qui répond à ma question. Ce qui était vraiment énervant, ce n’était pas que la fenêtre d’invite apparaisse, mais qu’elle devait rester ouverte aussi longtemps que le programme fonctionnait. Maintenant, le flash est totalement supportable, et pas aussi ennuyeux. Va vérifier si je peux modifier le script pour exécuter rubyw à la place de ruby.
Jake
1
Merci beaucoup d'avoir expliqué la différence entre "python" et "pythonw" - enfin, j'ai trouvé la solution pour exécuter les outils de la fenêtre python sans l'invite de commande en arrière-plan.
FP
«Java.exe» et «javaw.exe» sont identiques.
redbeam_
Vous pouvez - mais pas dans le code de lot lui-même. Il y a vraiment un certain nombre de questions ici sur la façon de masquer l'invite de commande superuser.com/questions/62525/… superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop
21

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!

Indago
la source
8

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

De l'extérieur, la fenêtre de la console cmd apparaîtra, mais pour éviter cela, vous pouvez créer un fichier de raccourci avec les propriétés modifiées pour un démarrage minimisé .

Vhanla
la source
2
Dans Windows 8.1, cette option est dans Propriétés -> onglet Raccourci -> Exécuter: -> réduit au minimum ("Fenêtre normale" par défaut)
pix
5

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

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

Bat à exe

N'enracinez pas ici plz ...
la source
Le site Web nécessite que votre ordinateur "résolve" le crypto captcha. Voici le programme nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks
4

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 fonctionne avec du mastic et qui a le même problème (CMD supplémentaire), voici comment je l'ai écrit:

@ÉCHO OFF
START / B putty.exe - charge le fichier nom_du_mon_config

Cela a fonctionné parfaitement.

Adonis Darwish
la source
4

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.
Dennis Williamson
la source
3
Cela fonctionnera peut-être si une invite de commande est ouverte, mais lorsque j'utilise le fichier .bat, je double-clique dessus ou un raccourci vers celui-ci sur mon bureau. J'essaie d'éviter d'avoir une invite de commande pour lancer ce programme.
Jake
3

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, sinon, resterait 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:
 ...
therube
la source
3

Vous pouvez utiliser RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
Jens A. Koch
la source
1

Si vous ne souhaitez toujours pas afficher la fenêtre de la console, voici 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).

raviolli
la source
0

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

Jesse
la source
0

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 visibiité, 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 exactement comme vous le souhaitez, avant de l’intégrer.

kayleeFrye_onDeck
la source
0

J'ai utilisé cmdow par 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 cache la fenêtre spécifiée

CMDOW [window] /END

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

CMDOW [window] /CLS

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

J'espère que cela t'aides.

sonrad10
la source
-5

Créez simplement un raccourci vers le fichier de commandes, cliquez dessus avec le bouton droit de la souris, cliquez sur Properties, allez à l' Generalonglet, cochez la case intitulée Hidden, cliquez sur Apply, puis sur OK.
Maintenant que vous ouvrez le raccourci, le fichier de commandes caché sera exécuté.

MagicalDiamonds
la source
Ceci est faux, car il ne fait que masquer le raccourci / fichier de traitement, tandis que l'utilisateur souhaite que le fichier de traitement s'exécute de manière invisible.
Ne pas enraciner ici plz ...