web-dev-qa-db-fra.com

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

Je cherche un moyen d'exécuter un fichier de commandes (.bat) sans que rien ne soit visible pour l'utilisateur (pas de fenêtre, pas de nom de 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 trop utiliser VBS.

130
Moayad Mardini

Solution 1:

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

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

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:\Un autre endroit\MyBatchFile.bat"

Pour pouvoir également transmettre/relayer une liste d'arguments, utilisez uniquement deux guillemets doubles.

CreateObject ("Wscript.Shell"). Exécutez "" & 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 mode silencieux: Quiet , hidecon ou hideexec .

112
harrymc

Pour masquer des fichiers de commandes, des fichiers de commandes ou des fichiers quelconques .... Utilisez l’utilitaire intégré IExpress.exe de Windows XP pour créer un fichier .EXE à partir du fichier de commandes. Lorsque vous utilisez IExpress, assurez-vous de cocher l'option "exécuter masqué" 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 que vous choisissez et vous ne le verrez jamais apparaître.

25
Paul Cheselske

use Cmdow est un utilitaire de ligne de commande Win32 pour NT4/2000/XP/2003 qui permet à des fenêtres d’être répertoriées, déplacées, redimensionnées, renommées, cachées/non masquées, désactivées/activées, minimisées, agrandies, restaurées, activées/désactivées. fermé, tué et plus encore.

Exécuter un fichier de commandes caché en lui passant les paramètres: -

cmdow/run/caché mybat arg1 "arg 2"

8
joe

Si votre fichier de traitement par lot peut contenir une seule ligne et autant de caractères, utilisez simplement un raccourci en cliquant avec le bouton droit de la souris sur un dossier placé dans un répertoire aléatoire et en sautant le reste de l’expert, puis en faisant un clic droit sur le raccourci que vous venez de créer. Cliquez sur les propriétés et sous la cible, entrez ce que vous mettriez habituellement dans un fichier chauve-souris. 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
8
Jack S

Exécutez le script via at 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 pouvez simplement créer un script et l'exécuter avec pythonw (la version liée pour les opérations d'interface graphique). Puisque vous n'utilisez aucune API graphique, la fenêtre ne s'affichera pas. Utilisez simplement des appels à os.system() et cela imitera un script batch, car cela revient à 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")
7
John T

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 l'intitulé de votre lot avec la commande title pour éviter de masquer toutes les fenêtres cmd, comme ceci:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
5
BijaN-R

Vous pouvez l'exécuter facilement.

start /MIN batch.cmd
5
Brad Gilbert

Sous Windows 7, vous pouvez utiliser le panneau de configuration "Tâche programmée" pour planifier l’exécution d’un fichier de commandes 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:

enter image description here

En outre, même si le nombre de fonctionnalités est réduit, vous pouvez également créer une tâche de script de traitement par lots invisible à partir de la ligne de commande à l'aide de la commande "AT.exe" sans l'option "/ interactive".

5
djangofan

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

Il a une interface utilisateur simple. Vous pouvez choisir de ne pas avoir de fenêtre de console en sélectionnant l'option «Application invisible». En outre, il vous permet d’affecter une icône, des fichiers associés au package et plusieurs autres options.

Voici une capture d'écran de la fenêtre principale de l'interface:

 
Notez que cette image est obsolète. Il présente la version 2.4.8 et, à compter de septembre 2018, le site Web propose la version 3.0.10.0 (dernière mise à jour le 2018-03-23).

Attention: le site Web www.f2ko.de renvoie au coinhive.com, qui est largementidentifiécommemalware .

3
BullyWiiPlaza

ENCORE, à partir de C/C++, utilisez la fonction CreateProcess avec l'indicateur CREATE_NO_WINDOW. Il 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 );
3
Swiss Frank

Vous pouvez également créer un AutoHotkey script:

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
3
endolith

On dirait que quelqu'un a dressé une liste des 7 à 8 façons de fonctionner en mode silencieux:

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

3
Rolnik

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

  1. téléchargez nircmd.exe à partir du link
  2. créez votre fichier .bat
  3. la première ligne du fichier .bat doit être ceci: nircmd.exe win hide ititle "cmd.exe"
  4. sélectionnez les deux fichiers et créez un fichier auto-extractible à l'aide de winrar
  5. dans l'onglet "Général", cochez la case "Créer un fichier à extraction automatique".
  6. dans l'onglet "avance" sélectionnez le bouton "extrait automatique"
  7. il y a une nouvelle fenêtre et sélectionnez l'onglet "mode" puis sélectionnez l'option: "tout masquer"
  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. Dans la zone "Exécuter après l'extraction", écrivez le chemin complet où votre fichier .bat sera extrait. Ex: si vous définissez le dossier d'extraction comme: "c:\windows \", le chemin complet à exécuter après l'extraction sera: "c:\windows\fichier.bat" (dans le cas où votre .bat s'appelle: fichier.bat )
  10. cliquez sur accepter sur toutes les fenêtres

Vous aurez maintenant un fichier .exe qui, après avoir cliqué dessus et l’installé, exécutera votre fichier .bat totalement caché.

2
ZEUS

Ajout de ma réponse ici depuis un autre post puisqu'il s'agissait d 'un doublon et que je ne vois pas cette solution ici, il existe maintenant 17 réponses différentes pour savoir comment exécuter un fichier de commandes caché. Je vais supprimer ma réponse sur ce message dans un avenir proche.

Créez votre script batch avec votre logique batch et vos commandes, puis créez un nouveau fichier avec l'extension .VBS, utilisez la logique ci-dessous (exemple fourni ci-dessous) et branchez 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 dans l'exemple ci-dessous spécifie C:\Folder\BatchFileName.cmd, changez cette option pour pointer vers le script de traitement par lots avec vos commandes que vous exécutez manuellement, etc. maintenant.

Enregistrez le fichier .VBS et planifiez-le avec Task SchedulerProblèmes lors de la planification d'une tâche sur windows7 pour s'exécuter selon un calendrier indéfini, adapté à vos besoins.

Sinon, il vous suffit de double-cliquer sur le fichier .VBS pour exécuter la commande infinie PING que vous avez insérée dans le fichier de traitement par lots sur lequel vous le pointez au besoin.

NOTE: Je crois que c'est de là que vient cette logique de script, mais il fonctionne de manière fiable dans le même but que vous avez ici, c'est-à-dire que la fenêtre de commande est masquée lorsqu'un fichier de commandes est exécuté Source d'erreur du serveur

EXEMPLE DE LIGNE DE COMMANDE D'EXÉCUTION VBS SCRIPT RUN CACHANT LA FENÊTRE CMD

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
1
Pimp Juice IT

IciJ'ai compilé tous les moyens que je connais pour démarrer un processus caché avec batch sans outils externes.Avec des scripts prêts à l'emploi (dont certains très riches en options), et tous Les PID sont retournés. Les outils utilisés sont IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process et JScript.Net.

1
npocmaka

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

Si vous exécutez les fichiers de commandes à partir d'un service Windows, vous devez les masquer par défaut, sauf si vous activez l'option "Autoriser le service à interagir avec le Bureau" sur le service.

1
sgmoore

Malgré que j'ai déjà répondu à ceci, voici une autre approche. La différence est que le script batch peut se masquer lui-même lors de son exécution. Vous aurez besoin de deux scripts supplémentaires bien que - windowMode.bat et getCMDPid.bat (les deux contiennent le code .net ). Voici comment alors peut être utilisé:

@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
npocmaka
cmdow /run /hid "file.extention" arg1 "arg 2"
1
malak

Je devais masquer la fenêtre d'un fichier de commandes appelé à partir d'un menu contextuel de l'Explorateur, mais aussi ajouter des guillemets au paramètre. Aucune des réponses n’ayant fonctionné pour moi, j’ajoute ma propre solution.

J'avais ceci sur la "commande" du registre pour un menu contextuel de l'Explorateur:

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

Donc, pour le remplacer, je devais créer un vbs comme celui-ci:

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

Enregistrez dans un endroit comme C:\mypath\myscript.vbs et appelez-le comme ceci dans le registre:

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

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

0
bortao

Je suis créé RunApp pour faire un tel travail et l'utiliser également dans mon environnement de production, j'espère que cela aidera.

La config comme ci-dessous:

fichier: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Et lancez runapp.exe à la place.

0
James Yang

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
0
djangofan

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

0
Alan Panayotov