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

Je recherche un moyen d'exécuter un fichier batch (.bat) sans que rien ne soit visible pour l'utilisateur (aucune fenêtre, aucun nom de la barre des 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.

    Solution 1:

    Enregistrez cette ligne de texte comme fichier invisible.vbs :

    CreateObject ("Wscript.Shell"). Exécutez "" "" et WScript.Arguments (0) et "" "", 0, Faux

    Pour exécuter n'importe quel 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 transmettre / relayer une liste d'arguments, utilisez seulement deux guillemets

    CreateObject ("Wscript.Shell"). Exécutez "" et WScript.Arguments (0) & "", 0, False

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

    Solution 2:

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

    Pour masquer les fichiers par lots ou les fichiers de commandes ou les fichiers … Utilisez Windows XP intégré dans l'utilitaire IExpress.exe pour créer un .EXE hors du fichier batch. Lorsque vous utilisez IExpress assurez-vous de vérifier l'option de l'exécution cachée et cochez toutes les cases pour ne rien afficher. Après avoir créé votre .exe, placez-le dans n'importe quel dossier de commande de course que vous choisissez et vous ne le verrez jamais apparaître.

    Utiliser Cmdow est un utilitaire de ligne de commande Win32 pour NT4 / 2000 / XP / 2003 qui permet à Windows d'être répertorié, déplacé, redimensionné, renommé, caché / non identifié, désactivé / activé, minimisé, maximisé, restauré, activé / inactivé, fermé, tué et plus.

    Exécutez un fichier batch caché en passant les paramètres: –

    Cmdow / run / hidden mybat arg1 "arg 2"

    Exécutez le script via un travail 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 pouvez 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'affiche pas. Il suffit d'utiliser les appels vers os.system() et il imite un script de lot, car il est identique à taper les chaînes dans la ligne de commande.

    Exemple:

     import os os.system("tasklist > C:\tasks.txt") os.system("ipconfig /all > C:\netinfo.log") 

    On dirait que quelqu'un a fait une liste des 7 à 8 manières d'exécuter "silencieux":

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

    À l'aide de Windows7, vous pouvez utiliser le panneau de contrôle "Tâche planifiée" pour planifier un fichier batch à exécuter en arrière-plan de manière invisible avec des autorisations spécifiées et même en tant que compte "SYSTEM". Voir la capture d'écran ci-dessous:

    Entrez la description de l'image ici

    En outre, même si vous ne disposez pas autant de fonctionnalités, vous pouvez également créer une tâche de script de lot invisible comme celle-ci à partir de la ligne de commande à l'aide de la commande "AT.exe" sans l'option '/ interactive'.

    Si votre fichier batch peut correspondre à une seule ligne et tant de caractères, utilisez simplement un raccourci en cliquant avec le bouton droit de la souris dans un dossier dans un répertoire aléatoire et sautez le reste de l'assistant et enfin cliquez avec le bouton droit de la souris sur le raccourci créé et Cliquez sur les propriétés et sous la cible, inscrivez ce que vous mettez habituellement dans un fichier de bat. Et Bobs ton oncle!

    Avantages:

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

    Les inconvénients:

      Limited to one line, so many characters 

    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 faire de votre titre de lot personnalisé d'abord avec la commande de title pour éviter de cacher toutes les fenêtres cmd , comme ceci:

     title MyBatch nircmd.exe win hide ititle "MyBatch" 

    Vous pouvez l'utiliser facilement.

     start /MIN batch.cmd 

    Convertissez votre chauve-souris en exe et n'aura pas de fenêtre de console automatiquement.

    TOUTE AUTRE manière, de C / C ++, c'est utiliser la fonction CreateProcess avec le drapeau CREATE_NO_WINDOW. Il y a beaucoup de puissance supplémentaire qui n'est pas présentée ici. Ce n'est que le minimum dont vous avez besoin pour remplacer le système () 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 ); 

    Vous n'avez pas besoin de faire de spécial.

    Si vous exécutez les fichiers par lots à partir d'un service Windows, ils doivent être cachés par défaut, sauf si vous activez l'option "Autoriser l'interaction du service avec le bureau" sur le service.

    En ajoutant ma réponse ici à partir d'une autre publication puisqu'il s'agissait d'un duplicata et je ne vois pas cette solution ici, il y a maintenant 17 réponses différentes pour savoir comment exécuter un fichier batch caché. Je vais supprimer ma réponse à ce sujet à un moment donné dans un proche avenir.

    Créez votre script de lot avec votre logique de lot et les commandes, puis créez un nouveau fichier avec l'extension .VBS , utilisez la logique ci-dessous (exemple I ci-dessous) et connectez simplement le chemin d'accès complet à votre fichier .CMD ou .BAT avec Les commandes PING -t <IPAddress> , etc., de sorte qu'il exécute le lot de manière cachée, ne montrant pas la fenêtre de commande lorsqu'il est exécuté.

    Lorsque la logique dans l'exemple ci-dessous spécifie C:\Folder\BatchFileName.cmd modifiez-le pour pointer vers le script de lot avec vos commandes que vous utilisez manuellement, etc. maintenant.

    Enregistrez le fichier .VBS et planifiez-le avec les .VBS du .VBS de Task Scheduler ordonnant une tâche sur Windows7 pour exécuter dans un programme indéfini pour vos besoins.

    Sinon, double-cliquez sur le fichier .VBS pour exécuter la commande infinie PING vous avez placée dans le fichier batch que vous .VBS comme nécessaire.

    REMARQUE: Je crois que c'est là où j'ai obtenu cette logique de script, mais cela fonctionne de manière fiable pour le même but que vous avez besoin ici, c'est-à-dire pour s'assurer que la fenêtre de commande est masquée lorsqu'un fichier de commandes est exécuté. Source de défaut du serveur

    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 

    Ici, j'ai compilé toutes les façons dont je sais pour démarrer un processus caché avec un lot sans outils externes. Avec des scripts prêts à utiliser (certains d'entre eux très riches en options), et tous forment une ligne de commande. PID est renvoyé. Les outils utilisés sont IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process et JScript.Net

    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 la suivante: nircmd.exe win hide ititle "cmd.exe"
    4. Sélectionnez les deux fichiers et créez un fichier auto-extrait à l'aide de winrar
    5. Dans l'onglet "général", cochez la case "Créer un fichier d'extraction automatique"
    6. Dans l'onglet "avance" sélectionnez le bouton "autoextraction"
    7. Il y a une nouvelle fenêtre et sélectionnez l'onglet "Mode" puis sélectionnez l'option: "cacher tout"
    8. Sélectionnez l'onglet "mise à jour" et sélectionnez l'option "écraser les fichiers existants"
    9. Sélectionnez l'onglet "général" et définissez un dossier de destination pour l'extraction si vous le souhaitez et dans la case "Excectez après extraction", écris le chemin complet où votre .bat sera extrait. Ex: si vous définissez le dossier d'extraction comme suit: "c: \ windows \" alors le chemin d'accès complet pour excuter après l'extraction sera: "c: \ windows \ file.bat" (dans le cas où votre .bat s'appelle: file.bat )
    10. Cliquez sur accepter sur toutes les fenêtres

    Maintenant, vous aurez un fichier .exe qui, après avoir double cliquer dessus et l'installer, votre .bat sera complètement caché.

    Malgré que j'ai déjà répondu à cette question, voici une autre approche. Les différents ici sont que le script de lot peut se cacher lui-même pendant qu'il est exécuté. Vous aurez besoin de deux scripts supplémentaires cependant – windowMode.bat et getCMDPid.bat (les deux contiennent le code .net ). Voici comment puis-je utiliser:

     @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 

    Vous pouvez également créer un script AutoHotkey :

     #NoTrayIcon ; To prevent momentary icon pop-up run whatever.bat arg1 arg2,,hide 
     cmdow /run /hid "file.extention" arg1 "arg 2" 

    J'ai eu le même problème, mais j'ai compris:
    Shell("filehere" & "parametersforbatchfilehere", vbHidden)

    J'ai commencé à essayer de comprendre cela et je n'ai jamais vraiment réussi. C'était aussi proche que j'ai eu:

     @echo off if not defined PIL ( set PIL=1 start /min "" %~0 exit /b ) TITLE Hello World echo Hello world! pause>nul 

    Cela fonctionne pour Windows 8 (peut-être d'autres)

    1. Créez un fichier batch comme d'habitude
    2. Créer un raccourci vers le fichier de commandes
    3. Cliquez avec le bouton droit sur le raccourci> propriétés
    4. Mise en page
    5. Décochez "Laisser la fenêtre de position du système"
    6. Position gauche gauche tp -1000
    7. Cliquez sur appliquer

    8. Cliquez sur le raccourci et il fonctionnera, mais vous ne le verrez pas 🙂