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.
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 .
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.
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"
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
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")
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"
Vous pouvez l'exécuter facilement.
start /MIN batch.cmd
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:
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".
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 .
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 );
Vous pouvez également créer un AutoHotkey script:
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
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
Je l'ai fait avec succès avec nircmd de cette façon:
nircmd.exe win hide ititle "cmd.exe"
Vous aurez maintenant un fichier .exe qui, après avoir cliqué dessus et l’installé, exécutera votre fichier .bat totalement caché.
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 Scheduler
Problè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
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.
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.
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
cmdow /run /hid "file.extention" arg1 "arg 2"
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
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.
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
J'ai eu le même problème, mais j'ai compris:Shell("filehere" & "parametersforbatchfilehere", vbHidden)