2009-10-29 12:42:48 +0000 2009-10-29 12:42:48 +0000
144
144

Exécuter un fichier batch de manière complètement cachée

Je cherche un moyen d'exécuter un fichier batch (.bat) sans rien de visible pour l'utilisateur (pas de fenêtre, pas de nom de barre de tâches, .etc.).

Je ne veux pas utiliser un programme pour faire ça, je cherche quelque chose de plus propre. J'ai trouvé une solution qui utilise VBScript, mais je n'aime pas vraiment utiliser VBS non plus.

Réponses (23)

122
122
122
2009-10-29 16:29:10 +0000

Solution 1:

Enregistrez cette ligne de texte dans le fichier invisible.vbs :

CreateObject(“Wscript.Shell”).Run “”“” & WScript. Arguments(0) & “”“”, 0, False

Pour exécuter tout programme ou fichier batch de manière invisible, utilisez-le comme ceci :

wscript.exe “C:\Wherever\invisible.vbs” “C:\Some Other Place\MyBatchFile. bat”

Pour pouvoir également coller/relancer une liste d'arguments, n'utilisez que deux guillemets doubles :

CreateObject(“Wscript.Shell”).Run “” & WScript. Arguments(0) & “”, 0, False

Exemple : Invisible.vbs "Kill.vbs ME.exe"

Solution 2:

Utiliser un outil en ligne de commande pour lancer silencieusement un processus : Quiet , hidecon ou hideexec .

29
29
29
2012-06-29 21:06:44 +0000

Pour masquer les fichiers de lots ou les fichiers de commande ou tout autre fichier…. Utilisez l'utilitaire Windows XP intégré IExpress.exe pour créer un fichier .EXE à partir du fichier de commandes. Lorsque vous utilisez IExpress, assurez-vous de cocher l'option “Exécuter caché” et de cocher toutes les cases pour ne rien afficher. Après avoir créé votre fichier .exe, placez-le dans le dossier de commande d'exécution de votre choix et vous ne le verrez jamais apparaître.

10
10
10
2009-10-29 12:48:03 +0000

use Cmdow est un utilitaire en ligne de commande Win32 pour NT4/2000/XP/2003 qui permet de lister, déplacer, redimensionner, renommer, masquer/non masquer, désactiver/activer, minimiser, maximiser, restaurer, activer/inactiver, fermer, tuer et plus encore.

Run a batch file hidden passing it parameters:-

cmdow /run /hid mybat arg1 “arg 2”

10
10
10
2013-01-13 03:36:21 +0000

Si votre fichier batch peut tenir sur une seule ligne et contenir autant de caractères, il suffit d'utiliser un raccourci en faisant un clic droit à l'intérieur d'un dossier placé dans un répertoire aléatoire, et de passer le reste de l'assistant, et enfin de faire un clic droit sur le raccourci qui vient d'être créé et de cliquer sur propriétés et sous cible, d'entrer ce que vous mettriez habituellement dans un fichier bat. Et Bobs votre oncle !

Pour :

No Command Window
 Ability to use an icon
 Same Functionality of bat file

Contre :

Limited to one line, so many characters
9
9
9
2009-10-29 12:49:03 +0000

Exécutez le script via un at job sans le rendre interactif :

at 11:00 script.bat

Une autre solution, si cela ne vous dérange pas d'installer quelque chose comme Python, vous pourriez simplement créer un script et l'exécuter avec pythonw (la version liée pour les opérations GUI). Comme vous n'utilisez pas d'API graphique, la fenêtre ne s'affichera pas. Utilisez simplement des appels à os.system() et il imitera un script batch, car cela revient à taper les chaînes de caractères dans la ligne de commande.

Exemple :

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
7
7
7
2014-05-12 08:25:28 +0000

Je n'aime pas la solution VBScript.

Téléchargez et copiez nircmd.exe dans votre dossier %systemroot%\system32, puis ajoutez cette commande à la première ligne de votre lot :

nircmd.exe win hide ititle "cmd.exe"

ou personnalisez d'abord le titre de votre lot avec la commande title pour éviter de cacher toutes les fenêtres cmd, comme ceci :

title MyBatch
nircmd.exe win hide ititle "MyBatch"
7
7
7
2009-10-29 15:54:30 +0000

Vous pouvez le faire fonctionner en minimisant facilement.

start /MIN batch.cmd
6
6
6
2013-01-09 20:57:35 +0000

Sous Windows7, vous pouvez utiliser le panneau de configuration “Tâche planifiée” pour programmer l'exécution d'un fichier batch en arrière-plan de manière invisible avec les autorisations spécifiées et même en tant que compte “SYSTÈME”. Voir la capture d'écran ci-dessous : En outre, bien que les possibilités soient moins nombreuses, vous pouvez également créer une tâche de script batch invisible comme celle-ci à partir de la ligne de commande en utilisant la commande “AT.exe” sans l'option “/interactive”.

5
5
5
2016-10-30 13:15:17 +0000

L'excellent Bat To Exe Converter convertira votre fichier .bat ou .cmd en un fichier .exe.

Il possède une interface utilisateur simple. Vous pouvez choisir de ne pas avoir de fenêtre de console en sélectionnant une option Exe Format de XX Bit | Windows (Invisible). Il vous permet également d'attribuer une icône, de définir un mot de passe et plusieurs autres options.

4
4
4
2011-01-26 19:38:48 +0000

Il semble que quelqu'un ait fait une liste des 7-8 façons de se taire :

http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html

4
4
4
2017-06-19 08:27:15 +0000

D'AUTRES façons, à partir de C/C++, consistent à utiliser la fonction CreateProcess avec le drapeau CREATE_NO_WINDOW. Elle a beaucoup de puissance supplémentaire qui n'est pas montrée ici. C'est juste le minimum dont vous avez besoin pour remplacer system() ou la famille _spawn().

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window. CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
4
4
4
2017-04-16 14:03:20 +0000

Vous pouvez également créer un script AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
3
3
3
2014-09-24 17:58:35 +0000

Je l'ai fait avec succès avec nircmd de cette façon :

  1. téléchargez nircmd.exe à partir du lien
  2. créez votre fichier .bat
  3. la première ligne du fichier .bat doit être celle-ci : nircmd.exe win hide ititle "cmd.exe"
  4. Sélectionnez les deux fichiers et créez un fichier d'auto-extraction en utilisant winrar
  5. dans l'onglet “général”, cochez la case “créer un fichier d'auto-extraction”
  6. dans l'onglet “avance”, sélectionnez le bouton “auto-extraction”
  7. une nouvelle fenêtre apparaît et sélectionnez l'onglet “mode” puis choisissez l'option : “8. sélectionner l'onglet "mise à jour” et choisir l'option “écraser les fichiers existants”
  8. Sélectionnez l'onglet “general” et définissez un dossier de destination pour l'extraction si vous le souhaitez et dans la case “Excecute after extraction” écrivez le chemin complet où votre .bat sera extrait. Ex : si vous définissez le dossier d'extraction comme : “c:\windows”, alors le chemin complet à extraire après l'extraction sera : c:\windows\file.bat" (dans le cas où votre .bat est nommé : file.bat)
  9. cliquez sur “Accepter” sur toutes les fenêtres

Maintenant vous aurez un fichier .exe qui, après avoir double-cliqué dessus et l'avoir installé, votre .bat sera totalement caché.

2
2
2
2016-01-30 16:44:14 +0000

Ajoutant ici ma réponse d'un autre post puisque c'était un double et que je ne vois pas cette solution ici, il y a maintenant 17 réponses différentes pour savoir comment vous pouvez exécuter un fichier batch caché. Je supprimerai ma réponse sur ce post dans un futur proche.

Créez votre script batch avec votre logique et vos commandes batch, puis créez un nouveau fichier avec l'extension .VBS, utilisez la logique ci-dessous (exemple que j'ai fourni ci-dessous) et insérez simplement le chemin complet de votre fichier .CMD ou .BAT avec le PING -t <IPAddress>, etc. afin qu'il exécute le lot de manière cachée et n'affiche pas la fenêtre de commande lorsqu'il est exécuté.

Lorsque la logique de l'exemple ci-dessous spécifie C:\Folder\BatchFileName.cmd, changez cela pour pointer vers le script de lot avec vos commandes que vous exécutez manuellement, etc. maintenant. Enregistrez le fichier .VBS et planifiez le avec Task Scheduler Problèmes de planification d'une tâche sur windows7 pour qu'elle s'exécute selon un calendrier indéfini pour vos besoins.

NOTE: Je crois que c'est de là que je tiens cette logique de script mais elle fonctionne de manière fiable dans le même but que celui dont vous avez besoin ici qui est de s'assurer que la fenêtre de commande est cachée lorsqu'un fichier batch est exécuté Server Fault Source

EXEMPLE VBS SCRIPT RUN COMMAND LINE BATCH HIDING CMD WINDOW

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
2
2
2
2012-10-12 07:16:50 +0000
  • Ici ** J'ai compilé tous les moyens que je connais pour lancer un processus caché en batch sans outils externes, avec des scripts prêts à l'emploi (certains très riches en options), et tous en ligne de commande. Lorsque c'est possible, le PID est également renvoyé. Les outils utilisés sont IEXPRESS,SCHTASKS,WScript.Shell,Win32_Process et JScript.Net
2
2
2
2017-03-09 18:01:08 +0000

Bien que j'aie déjà répondu à cette question, voici une autre approche. Vous aurez cependant besoin de deux scripts supplémentaires : windowMode.bat et getCMDPid.bat (les deux contiennent le code .net). Voici comment utiliser ces scripts :

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit
1
1
1
2011-07-02 09:04:44 +0000

Vous n'avez pas besoin de faire quoi que ce soit de spécial.

Si vous exécutez les fichiers batch à partir d'un service Windows, ils doivent être cachés par défaut, sauf si vous activez l'option “Allow service to interact with desktop” sur le service.

1
1
1
2010-06-14 14:11:34 +0000
cmdow /run /hid "file.extention" arg1 "arg 2"
0
0
0
2018-05-05 10:39:45 +0000

J'avais besoin de cacher la fenêtre d'un fichier batch appelé depuis un menu contextuel de l'explorateur, et j'avais également besoin d'ajouter des guillemets sur le paramètre. Aucune des réponses n'a fonctionné pour moi, donc j'ajoute ma propre solution. Je l'avais sur la “commande” du registre pour un menu contextuel de l'explorateur :

cmd /c C:\mypath\myprogram.bat "%1"

Donc pour le remplacer, j'ai dû créer un vbs comme ceci :

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Sauvegarder dans un endroit comme C:\mypath\myscript.vbs et l'appeler comme ceci sur le registre :

wscript "C:\mypath\myscript.vbs" "%1"

Notez que le chemin d'accès .bat ne peut pas avoir d'espaces, donc remplacez-le par le nom de fichier 8.3. Ainsi, par exemple, C:\Program Files\myprogram.bat doit être référencé comme C:\Progra~1\myprogram.bat. Pour voir le nom de fichier 8.3, utilisez dir /x

0
0
0
2018-06-21 08:15:59 +0000

J'ai créé RunApp pour faire un tel travail et aussi pour l'utiliser dans mon environnement de production, j'espère que ça aidera.

La configuration comme ci-dessous :

file : config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Et lancez runapp.exe à la place.

0
0
0
2013-06-07 20:50:58 +0000

J'avais le même problème, mais je l'ai résolu : Shell("filehere" & "parametersforbatchfilehere", vbHidden)

0
0
0
2012-12-17 17:03:50 +0000

J'ai commencé à essayer de comprendre cela et je n'ai jamais vraiment réussi. Je n'ai pas pu aller plus loin :

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul
-1
-1
-1
2014-08-15 23:36:30 +0000

Cela fonctionne pour les fenêtres 8 (éventuellement d'autres)

  1. Créez un fichier batch comme d'habitude
  2. Créez un raccourci vers le fichier batch
  3. Cliquez avec le bouton droit de la souris sur le raccourci > propriétés
  4. Cliquez sur Layout
  5. décochez “Let system position window”
  6. définissez la position gauche tp -1000
  7. cliquez sur apply

  8. Cliquez sur le raccourci et il s'exécutera mais vous ne le verrez pas :)