web-dev-qa-db-de.com

Führen Sie eine Batch-Datei vollständig versteckt aus

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.

130
Moayad Mardini

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 .

112
harrymc

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.

25
Paul Cheselske

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"

8
joe

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
8
Jack S

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")
7
John T

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"
5
BijaN-R

Sie können es leicht minimiert ausführen.

start /MIN batch.cmd
5
Brad Gilbert

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:

enter image description here

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.

5
djangofan

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 .

3
BullyWiiPlaza

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 );
3
Swiss Frank

Sie können auch ein AutoHotkey Skript erstellen:

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

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

3
Rolnik

Ich habe es erfolgreich mit nircmd gemacht:

  1. laden Sie nircmd.exe vom link herunter
  2. erstellen Sie Ihre .bat-Datei
  3. die erste Zeile der .bat-Datei muss wie folgt lauten: nircmd.exe win hide ititle "cmd.exe"
  4. wählen Sie beide Dateien aus und erstellen Sie mit winrar eine selbstextrahierende Datei
  5. aktivieren Sie auf der Registerkarte "Allgemein" das Kontrollkästchen "Automatisch extrahierte Datei erstellen"
  6. wählen Sie auf der Registerkarte "Erweitert" die Schaltfläche "Automatisch extrahieren"
  7. es gibt ein neues Fenster und wähle die Registerkarte "Modus" und dann die Option "Alles verstecken".
  8. wählen Sie die Registerkarte "Aktualisieren" und wählen Sie die Option "Vorhandene Dateien überschreiben"
  9. Wählen Sie die Registerkarte "Allgemein" und definieren Sie einen Zielordner für das Extrahieren, wenn Sie möchten, und geben Sie in das Feld "Nach dem Extrahieren ausführen" den vollständigen Pfad ein, in den Ihr .bat extrahiert wird. Beispiel: Wenn Sie den Extraktionsordner als "c:\windows \" definieren, lautet der vollständige Pfad nach dem Extrahieren "c:\windows\file.bat" (in dem Fall, in dem Ihre .bat-Datei den Namen "file.bat" trägt) )
  10. klicken Sie in allen Fenstern auf Akzeptieren

Jetzt haben Sie eine .exe-Datei, die nach dem Doppelklick und der Installation Ihrer .bat-Datei vollständig ausgeblendet wird.

2
ZEUS

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 SchedulerProbleme 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
1
Pimp Juice IT

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

1
npocmaka

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.

1
sgmoore

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

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

0
bortao

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.

0
James Yang

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