Comment exécuter un fichier de commandes sans lancer de "fenêtre de commande"? [dupliquer]

131

Cette question a déjà une réponse ici:

Sous Windows XP, puis-je exécuter un fichier de traitement par lots (.bat ou .cmd), via un raccourci, sans "fenêtre noire"?

dugres
la source
6
Vous demandez-vous si vous pouvez empêcher la fenêtre de commande de s'afficher lorsque vous exécutez un fichier bat?
Eric
6
Oui, vous pouvez facilement modifier la couleur par défaut de la fenêtre de sortie en utilisant les propriétés du raccourci cmd.exe. (oui c'est une blague ...)
Toby J

Réponses:

86

Enregistrez les éléments suivants sous wscript, par exemple, hidecmd.vbs après avoir remplacé "testing.bat" par le nom de votre fichier de traitement par lots.

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

Le deuxième paramètre de oShell.Runest intWindowStylevaleur indiquant l'apparence de la fenêtre du programme et la valeur zéro correspond à la fenêtre masquée.

La référence est ici http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx

Sharjeel Aziz
la source
La troisième ligne serait-elle: strArgs = "cmd / c FILEPATH \ testing.bat"?
Dan Z
1
Y a-t-il un moyen de faire fonctionner la batte en mode élevé tout en restant invisible?
Laurens Swart
Comment exécuter un .batfichier en tant qu'administrateur à l'aide de cette méthode?
Mehdi Dehghani
44

Ceci est juste une simplification de la réponse de Shaji. Vous pouvez exécuter votre script batch par le biais d’un script VBScript (.vbs) comme celui-ci:

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

Ceci exécutera votre fichier de commandes sans fenêtre de commande.

grand loup
la source
Comment exécuter le .batfichier en tant qu'administrateur en utilisant cette méthode?
Mehdi Dehghani
@MehdiDehghani propriétés> sécurité> exécuter en tant qu'administrateur. Si cela ne fonctionne que pour exe ou les applications, alors oh wells.
TaylorS le
21

Pour développer les réponses "Utiliser les scripts Windows" (ce que je considère le mieux, car elles sont déjà intégrées), voici comment procéder en utilisant un seul script d'encapsuleur et en transmettant le nom du fichier batch "réel" en tant que paramètre. Des paramètres supplémentaires seront transmis au fichier de commandes.

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If

Par exemple, sauvegardez le fichier ci-dessus NoShell.vbsquelque part puis appelez:

NoShell.vbs c:\foo\my_batch_file.bat

Enfin, si vous souhaitez exécuter cette opération depuis un endroit qui ne comprend pas le fichier .vbs (tel qu'un "Outils externes" dans Visual Studio), vous voudrez appeler C:\Windows\System32\wscript.exeavec le fichier vbs comme premier paramètre et votre fichier batch comme le second.

Toby J
la source
6
Pour ceux qui n'aiment pas l'idée et le concept de devoir créer un nouveau fichier vbs pour chaque nouveau fichier chauve-souris créé, il faut utiliser l'une des deux premières réponses, c'est la solution parfaite. Au lieu de plusieurs fichiers vbs, vous aurez plusieurs raccourcis. Pour chaque nouveau fichier bat, créez un raccourci du fichier vbs, cliquez dessus avec le bouton droit de la souris, choisissez Propriétés> onglet Raccourcis, et dans la zone Cible, entrez le chemin du fichier bat après le chemin déjà existant, comme illustré ci-dessus ou comme cela si le raccourci est pas dans le même endroit que le fichier vbs: "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat.
Rolo
Si le chemin du fichier bat contient un espace, comment peut-il être appelé via un raccourci vers le fichier vbs? Par exemple: "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat. Peu importe ce que je cherche pour le chemin - des guillemets doubles autour de tout,% 20 à la place de l'espace, ou une combinaison de ces deux choses, rien ne fonctionne. Je reçois un message d'erreur m'indiquant que le fichier est introuvable ou que rien ne se produit. Cela est-il dû à une erreur de l'utilisateur, à une limitation de Windows avec le champ Cible pour les raccourcis, ou à un problème avec le script vbs dans lequel il ne gère pas correctement les chemins de fichiers contenant des espaces?
Rolo
@Rolo J'ai mis à jour le script afin que, si l'un des paramètres entrants comporte des espaces, il sera entouré de guillemets. Par conséquent, vous voudrez que le chemin d'accès au fichier de commandes soit entouré de guillemets lors de son appel, il sera alors considéré comme un argument unique et sera réemballé avant d'être appelé.
Toby J
9

Vous pouvez modifier les propriétés du raccourci pour une exécution réduite.

Pour l'exécuter de manière totalement invisible, vous aurez besoin de quelque chose d'autre, comme Windows Scripting.

ale
la source
1
Votre première suggestion est la façon dont je l'ai toujours fait.
martineau
8

Utilisez start avec l'option '/ B'. Par exemple:

@echo off
start /B go.bat
zaf
la source
25
start /bexécutera simplement le programme dans la console actuellement allouée au lieu d'en créer un nouveau. De toute façon, vous en aurez un nouveau puisque le lot doit fonctionner avec cmd (ce qui [surprise] ouvre une console).
Joey
@ Joey oui, mais c'est très utile pour lancer des fichiers batch à partir d'autres applications via une exécution shell (comme SYSTEMen C / C ++).
Tomáš Zato
1
@ TomášZato: Vous pouvez simplement appeler le fichier de commandes directement dans ce cas, ou, si ce que vous utilisez pour générer un processus ne crée pas d'abord un shell, utilisez-le cmd /c foo.cmd. Il n'y a absolument aucun besoin d'utiliser startdans ces scénarios, et, je dirais que cela systemne devrait pas être utilisé en faveur de CreateProcess. En lançant un fichier de commandes, vous êtes déjà dépendant d'une plate-forme. Vous pouvez également utiliser les meilleurs outils pour le travail.
Joey
@ Joey Merci beaucoup, jamais entendu parler cmd /cauparavant. La commande cmd est ce dont j'avais besoin dans mon cas, mais toutes les réponses stackexchange que j'ai trouvées jusqu'à présent, à propos d'un fichier de commandes exécutant un autre fichier de commandes, ont les meilleures réponses pour commencer ...
T_D
start /b go.bat n'allouera pas une nouvelle console (c'est-à-dire une instance de conhost.exe - ou un thread dans csrss.exe avant Windows 7). Toutefois, cela va créer un désordre, car le script de traitement par lots est exécuté avec une nouvelle instance de cmd.exe qui est attachée à la même console . Les deux instances du shell entreront en compétition pour lire les entrées de la console, généralement en alternance. Il faut /w(par exemple start /b /w go.bat) attendre la deuxième instance, ce qui revient à utiliser cmd /csi vous utilisez system. Aussi, si vous appelez CreateProcess, lancez go.batdirectement. Il n'y a pas besoin de cmd /c.
Eryk dim.
6

Open Source GPL libre "Créer un processus caché"

http://www.commandline.co.uk/chp/

Microsoft Security Essentials et probablement la plupart des autres analyseurs de virus / programmes malveillants traitent l'exécutable, chp.exe, comme un virus, car il dissimule le programme que vous spécifiez lorsque vous affichez une fenêtre ou un bouton de la barre des tâches, comme le font les virus.

Ce n'est pas un virus. Cela n'empêche pas le processus cible d'apparaître dans le gestionnaire de tâches, par exemple. Et bien sûr, le code source est inclus afin que vous puissiez voir qu'il est très petit et ne fait rien sauf exécuter le programme que vous lui donnez.

Vous n'avez même pas besoin de croire que le chp.exe inclus a vraiment été construit à partir de cette source. Vous pouvez continuer et supprimer le fichier chp.exe inclus et compiler le vôtre à partir de la source. Tous les outils nécessaires pour le faire sont même gratuits et téléchargeables.


Vous pouvez également créer un raccourci vers le fichier .bat ou .cmd, puis cliquer avec le bouton droit de la souris sur le raccourci, Propriétés, Onglet Raccourci, Exécuter: Réduit. Ensuite, dans les tâches planifiées, utilisez directement le raccourci au lieu du fichier .bat / .cmd. Cela empêchera une fenêtre d'apparaître, mais un bouton de la barre des tâches apparaîtra quand même.

bkw
la source
6

Vous pouvez utiliser un script de fenêtre tel que AutoIt .

Par exemple, écrivez simplement cela dans l'éditeur de script AutoIt. C'est assez simple

Run("C:\test\batchfile.bat", "", @SW_HIDE)

Si vous voulez l'exécuter en boucle,

$x=0
Do
 Run("C:\test\batchfile.bat", "", @SW_HIDE)
 Sleep(5000)
Until $x = 1

Compilez-le en tant que .exe - et vous avez terminé.


De même, dans AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
Adrian Yeoh
la source
5

Utilisez un départ caché (coûte 20 $)

Démarrage masqué - Exécuter des applications et des fichiers batch sans fenêtre de console ou invite UAC

Les applications de la console et les fichiers de commandes sont régulièrement exécutés au démarrage de Windows ou selon un calendrier. Le principal inconvénient est que chaque application ouvre une fenêtre de console qui scintille à l'écran. Hidden Start (ou Hstart) est un utilitaire léger de ligne de commande qui vous permet d'exécuter des applications console et des fichiers de commandes sans aucune fenêtre en arrière-plan, de gérer l'élévation des privilèges UAC sous Windows 7 et Vista, de lancer plusieurs commandes en parallèle ou de manière synchrone, etc. .

entrez la description de l'image ici

Kyle A
la source
Ceci est une application très bien conçue et utile.
Gourou Josh
5

Solution simple, sans utiliser de programmes supplémentaires.

  1. Créez le fichier de commandes que vous souhaitez exécuter et testez-le.
  2. Créez un raccourci pour cela.
  3. Modifiez les propriétés du raccourci: dans l’onglet Raccourci, choisissez Exécuter minimisé. Attribuez-lui une touche de raccourci et vous avez terminé!

Bonne chance!

Willem
la source
7
Ce n'est pas une solution au problème du PO. Il y a une différence entre Minimizing et Hiding
nixda
Si vous modifiez le raccourci pour utiliser l’icône de droite, l’éclat réduit de la barre des tâches est en réalité un rappel intéressant.
Qui que ce soit le
C'est une solution agréable et propre à mon problème! Je vous remercie!
dmitry_romanov
minimiser ... hehe.
Gumuruh