Ich suche nach einer Möglichkeit, eine Batch-Datei (.bat) auszuführen, ohne dass für den Benutzer etwas sichtbar ist (kein Fenster, kein Taskleistenname, .etc ..).
Ich möchte kein Programm verwenden, um das zu tun, ich suche etwas saubereres. Ich habe eine Lösung gefunden, die VBScript verwendet, aber ich mag es auch nicht, VBS zu verwenden.
Lösung 1:
Speichern Sie diese eine Textzeile als Datei invisible.vbs
:
CreateObject ("Wscript.Shell"). Führen Sie "" & WScript.Arguments (0) & "" ", 0, False aus
Um ein Programm oder eine Batch-Datei unsichtbar auszuführen, verwenden Sie sie wie folgt:
wscript.exe "C:\Wherever\invisible.vbs" "C:\Some Other Place\MyBatchFile.bat"
Um auch eine Liste von Argumenten weitergeben zu können, verwenden Sie nur zwei doppelte Anführungszeichen
CreateObject ("Wscript.Shell"). Führen Sie "" & WScript.Arguments (0) & "", 0, False aus
Beispiel: Invisible.vbs "Kill.vbs ME.exe"
Lösung 2:
Verwenden Sie ein Befehlszeilenprogramm, um einen Prozess im Hintergrund zu starten: Quiet , hidecon oder hideexec .
So verbergen Sie Batchdateien, Befehlsdateien oder andere Dateien: Verwenden Sie das in IExpress.exe
integrierte Windows XP -Dienstprogramm, um eine EXE-Datei aus der Batchdatei zu erstellen. Wenn Sie IExpress
verwenden, stellen Sie sicher, dass Sie die Option "Ausgeblendet ausführen" aktivieren und alle Kontrollkästchen aktivieren, um zu verhindern, dass etwas angezeigt wird. Nachdem Sie Ihre .exe-Datei erstellt haben, legen Sie sie in den von Ihnen gewählten Ausführungsbefehlsordner und Sie werden sie nie mehr sehen.
use Cmdow ist ein Win32-Befehlszeilenprogramm für NT4/2000/XP/2003, mit dem Fenster aufgelistet, verschoben, in der Größe geändert, umbenannt, ausgeblendet/nicht ausgeblendet, deaktiviert/aktiviert, minimiert, maximiert, wiederhergestellt, aktiviert/inaktiviert werden können. geschlossen, getötet und mehr.
Führen Sie eine versteckte Batch-Datei aus, indem Sie die Parameter übergeben:
cmdow/run/hid mybat arg1 "arg 2"
Wenn Ihre Stapeldatei in eine Zeile und so viele Zeichen passt, verwenden Sie einfach eine Verknüpfung, indem Sie mit der rechten Maustaste in einen Ordner in einem zufälligen Verzeichnis klicken, den Rest des Assistenten überspringen und zuletzt mit der rechten Maustaste auf die gerade erstellte Verknüpfung und klicken Klicken Sie auf Eigenschaften und geben Sie unter Ziel ein, was Sie normalerweise in eine bat-Datei einfügen würden. Und Bob dein Onkel!
Vorteile:
No Command Window
Ability to use an icon
Same Functionality of bat file
Nachteile:
Limited to one line, so many characters
Führen Sie das Skript über einen at-Job aus, ohne es interaktiv zu machen:
at 11:00 script.bat
Eine andere Lösung: Wenn Sie etwas wie Python installieren möchten, können Sie einfach ein Skript erstellen und es mit pythonw
(der verknüpften Version für GUI-Vorgänge) ausführen. Da Sie keine grafischen APIs verwenden, wird das Fenster nicht angezeigt. Verwenden Sie einfach Aufrufe von os.system()
, und es wird ein Stapelskript imitiert, da dies mit dem Eingeben der Zeichenfolgen in die Befehlszeile identisch ist.
Beispiel:
import os
os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
Ich mag keine VBScript-Lösung.
Laden Sie nircmd.exe herunter und kopieren Sie es in Ihren Ordner %systemroot%\system32
. Fügen Sie dann diesen Befehl in die erste Zeile Ihres Stapels ein:
nircmd.exe win hide ititle "cmd.exe"
oder erstellen Sie Ihren Stapeltitel zuerst mit dem Befehl title
, um zu vermeiden, dass alle cmd
-Fenster wie folgt ausgeblendet werden:
title MyBatch
nircmd.exe win hide ititle "MyBatch"
Sie können es leicht minimiert ausführen.
start /MIN batch.cmd
Unter Windows7 können Sie über die Systemsteuerung "Geplante Tasks" festlegen, dass eine Batchdatei im Hintergrund unsichtbar mit den angegebenen Berechtigungen und sogar als "SYSTEM" -Konto ausgeführt wird. Siehe Screenshot unten:
Darüber hinaus können Sie mit dem Befehl "AT.exe" ohne die Option "/ interactive" auch eine unsichtbare Batch-Skript-Task wie diese über die Befehlszeile erstellen.
Der exzellente Bat To Exe Converter konvertiert Ihre .bat
- oder .cmd
-Datei in eine .exe
-Datei.
Es hat eine einfache Benutzeroberfläche. Sie können festlegen, dass kein Konsolenfenster angezeigt wird, indem Sie die Option "Unsichtbare Anwendung" auswählen. Außerdem können Sie ein Symbol zuweisen, zugehörige Dateien paketieren und verschiedene andere Optionen auswählen.
Hier ist ein Screenshot des Hauptfensters der Benutzeroberfläche:
Beachten Sie, dass dieses Bild nicht mehr aktuell ist. Es zeigt die Version 2.4.8 und ab September 2018 bietet die Website die Version 3.0.10.0 (letzte Aktualisierung am 23.03.2018).
Warnung: Die Website www.f2ko.de verweist auf coinhive.com
, der weit verbreitetidentifiziertalsMalware .
In C/C++ können Sie die CreateProcess-Funktion auch mit dem CREATE_NO_WINDOW-Flag verwenden. Es hat viel zusätzliche Kraft, die hier nicht gezeigt wird. Dies ist nur das Minimum, das Sie benötigen, um system () oder die _spawn () -Familie zu ersetzen.
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 );
Sie können auch ein AutoHotkey Skript erstellen:
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
Es scheint, dass jemand eine Liste der 7-8 Möglichkeiten erstellt hat, um 'silent' zu betreiben:
http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html
Ich habe es erfolgreich mit nircmd gemacht:
nircmd.exe win hide ititle "cmd.exe"
Jetzt haben Sie eine .exe-Datei, die nach dem Doppelklick und der Installation Ihrer .bat-Datei vollständig ausgeblendet wird.
Füge meine Antwort hier aus einem anderen Beitrag hinzu da es ein Duplikat war und ich diese Lösung hier nicht sehe, gibt es jetzt 17 verschiedene Antworten, wie du eine versteckte Batch-Datei ausführen kannst. Ich werde meine Antwort auf diesen Beitrag in naher Zukunft löschen.
Erstellen Sie Ihr Stapelskript mit Ihrer Stapellogik und den darin enthaltenen Befehlen, und erstellen Sie dann eine neue Datei mit der Erweiterung .VBS
. Verwenden Sie die folgende Logik (siehe unten) und fügen Sie einfach den vollständigen Pfad zu Ihrem .CMD
oder Ihrer .BAT
-Datei mit dem PING -t <IPAddress>
ein. usw. befiehlt, damit es den Stapel auf versteckte Weise ausführt und das Befehlsfenster nicht anzeigt, wenn es ausgeführt wird.
Wenn die Logik im folgenden Beispiel C:\Folder\BatchFileName.cmd
angibt, ändern Sie dies so, dass es mit Ihren Befehlen, die Sie jetzt manuell usw. ausführen, auf das Stapelskript verweist.
Speichern Sie die .VBS
-Datei und planen Sie sie mit Task Scheduler
Probleme beim Planen einer Aufgabe unter Windows7 , um sie nach einem unbestimmten Zeitplan für Ihre Anforderungen auszuführen.
Andernfalls doppelklicken Sie einfach auf die Datei .VBS
, um den Befehl infinite PING
auszuführen, den Sie in die Batchdatei eingegeben haben, auf die Sie bei Bedarf zeigen.
ANMERKUNG: Ich glaube, hierher stammt diese Skriptlogik, aber sie funktioniert zuverlässig für den gleichen Zweck, den Sie hier benötigen, um sicherzustellen, dass das Befehlsfenster beim Ausführen einer Batchdatei ausgeblendet wird. Serverfehlerquelle
BEISPIEL VBS SCRIPT RUN BEFEHLSLINIE BATCH HIDING CMD WINDOW
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
HierIch habe alle Methoden zusammengestellt, mit denen ich einen versteckten Prozess mit Batch ohne externe Tools starten kann Sie bilden die Befehlszeile. Möglicherweise wird auch die PID zurückgegeben. Verwendete Tools sind IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process und JScript.Net
Sie müssen keine besonderen Dinge tun.
Wenn Sie die Batchdateien von einem Windows-Dienst ausführen, sollten sie standardmäßig ausgeblendet sein, es sei denn, Sie aktivieren die Option "Interaktion des Dienstes mit dem Desktop zulassen" für den Dienst.
Trotzdem habe ich hier schon einen anderen Ansatz beantwortet. Der Unterschied besteht darin, dass sich das Batch-Skript während der Ausführung selbst verstecken kann. Sie benötigen jedoch zwei zusätzliche Skripts - windowMode.bat und getCMDPid.bat (beide enthalten .net
code). Hier, wie dann verwendet werden kann:
@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"
Ich musste das Fenster für eine Batch-Datei, die aus einem Explorer-Kontextmenü aufgerufen wurde, ausblenden und dem Parameter auch Anführungszeichen hinzufügen. Keine der Antworten hat für mich funktioniert, daher füge ich meine eigene Lösung hinzu.
Ich hatte dies in der Registrierung "Befehl" für ein Explorer-Kontextmenü:
cmd /c C:\mypath\myprogram.bat "%1"
Um es zu ersetzen, musste ich ein vbs wie dieses erstellen:
WScript.CreateObject ("WScript.Shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False
Speichern Sie an einem Ort wie C:\mypath\myscript.vbs
und nennen Sie es in der Registrierung so:
wscript "C:\mypath\myscript.vbs" "%1"
Beachten Sie, dass der Pfad .bat keine Leerzeichen enthalten darf. Ersetzen Sie ihn daher durch den Dateinamen 8.3. Zum Beispiel muss C:\Program Files\myprogram.bat
als C:\Progra~1\myprogram.bat
bezeichnet werden. Um den 8.3 Dateinamen zu sehen, benutze dir /x
Ich habe RunApp erstellt, um einen solchen Job zu erledigen und ihn auch in meinem Produktionsumfeld zu verwenden. Ich hoffe, es hilft.
Die Konfiguration wie folgt:
Datei: config.arg
:style:hidden
MyBatchFile.bat
arg1
arg2
Und starte stattdessen runapp.exe
.
Ich fing an, das herauszufinden und es gelang mir nie wirklich. Das war so nah wie ich gekommen bin:
@echo off
if not defined PIL (
set PIL=1
start /min "" %~0
exit /b
)
TITLE Hello World
echo Hello world!
pause>nul