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

139

Ich suche nach einer Möglichkeit, eine Batch-Datei (.bat) auszuführen, ohne dass für den Benutzer etwas sichtbar ist (kein Fenster, kein Name in der Taskleiste, .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.

Moayad Mardini
quelle
Haha! Definitiv nicht. Ich entwickle einen Windows-Dienst, der von Zeit zu Zeit eine Batch-Datei ausführt.
Moayad Mardini
4
Windows-Dienste werden nicht als Batchdateien ausgeführt. Sie laufen als Dienste. Sie müssen die Frage klären - wie geschrieben und mit Kommentaren macht es für mich keinen Sinn.
CarlF
1
Ich habe einen Windows-Dienst, der Batchdateien ausführt. Nicht, dass der Dienst eine Batch-Datei ist.
Moayad Mardini
1
In welcher Sprache schreiben Sie Ihren Service?
Hugh Allen
es gibt auch hstart.
Barlop

Antworten:

119

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 Befehlszeilentool, um einen Prozess unbeaufsichtigt zu starten: Quiet , hidecon oder hideexec .

Harrymc
quelle
2
Warum 4 doppelte Anführungszeichen, könnten Sie bitte erklären?
Starx
Was wäre, wenn wir ein verstecktes Programm starten müssten?
Starx
5
@Starx VB-Syntax. &bedeutet, dass Zeichenfolgen verkettet werden. Zeichenfolgen werden in doppelte Anführungszeichen ( ") eingeschlossen. Aufeinanderfolgende Anführungszeichen ( "") innerhalb von Zeichenfolgenbegrenzern bedeuten ein wörtliches Anführungszeichen ( "). Vier doppelte Anführungszeichen ( """") wären also ein String-Literal mit einem Zeichen, ein doppeltes Anführungszeichen ( "). Füge es zusammen und """" & WScript.Arguments(0) & """"werde "<argument>", wo <argument>das erste Befehlszeilenargument an das Skript übergeben wird.
Bob
4
Wie kann ich es so ändern, dass es alle Argumente übergibt? Es wäre bequemer, die Argumente ohne Anführungszeichen weiterzugeben.
Strg-C
2
Müssen Sie dafür noch eine Batch-Datei erstellen, um das wscript.exe "C:\Wherever\invisible.vbs" ...Innere von zu setzen?
Endolith
26

So verbergen Sie Batchdateien, Befehlsdateien oder andere Dateien: Verwenden Sie das in Windows XP integrierte IExpress.exeDienstprogramm, um eine EXE-Datei aus der Batchdatei zu erstellen. Wenn Sie verwenden, IExpressstellen Sie sicher, dass Sie die Option "Ausgeblendet ausführen" aktivieren und alle Kontrollkästchen aktivieren, um nichts anzuzeigen. 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.

Paul Cheselske
quelle
1
Oh, eigentlich eine gute Lösung.
Camilo Martin
7
Gibt es in neueren Windows-Versionen wie Windows 7 etwas, das lexpress.exe entspricht?
Sonntag,
@ Sнаđошƒаӽ Es ist in Windows 7 .... gerade getestet
DarthRubik
@DarthRubik Danke, dass du das geteilt hast. Ich habe es auch getestet und es funktioniert einwandfrei. Zeit, die Antwort zu unterstützen. :)
Sнаđошƒаӽ
Dies scheint unter Windows 10 64 nicht zu funktionieren, da "Command.com" nicht mehr vorhanden zu sein scheint
Arne S
10

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, geschlossen, getötet und angezeigt werden können Mehr.

Führen Sie eine versteckte Batch-Datei aus, indem Sie die Parameter übergeben:

cmdow / run / hid mybat arg1 "arg 2"

Joe
quelle
Aber wie würde ich diesen Befehl ausführen?
Moayad Mardini
9
cmdow wird von den meisten Antivirenprodukten als Malware erkannt. Daher ist es schwierig, diese Lösung an anderen Orten als Ihrem eigenen PC zu verwenden.
Ganesh R.
@Ganesh: Irgendeine bessere Lösung?
Moayad Mardini
Ist es Open Source? Es hat keinen Sinn, eine Drittanbieter-App zu verwenden, die nicht Open Source ist und Trojaner packt, wenn Sie das Gleiche tun könnten, indem Sie Harrymcs einzeiliges vbscript ausführen (siehe Antwort oben im Thread).
Thebunnyrules
1
Nun, es ist Open Source, das ist ziemlich genial. Den Quellcode erhalten Sie hier: github.com/ritchielawrence/cmdow
thebunnyrules
9

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
Jack S
quelle
Das einzige Problem ist, dass Sie einen Dateityp nicht mit einer Verknüpfung verknüpfen können. Wenn Sie also ein Skript mit einem Batch öffnen möchten, indem Sie im Explorer darauf doppelklicken, benötigen Sie noch eine .bat-Datei.
Björn Lindqvist
Ich versuche immer noch, Onkel Bob zu finden, der ist überall hier !!
Pimp Juice IT
7

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 Batch-Skript imitiert, da es das gleiche ist wie das Eingeben der Zeichenfolgen in die Befehlszeile.

Beispiel:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
John T
quelle
3
Aber wie würde ich diesen Befehl ausführen?
Moayad Mardini
Sie müssten entweder eine geplante Aufgabe planen oder einen Dienst schreiben.
Unfundednut
Beispiele hinzugefügt.
John T
6

Sie können es leicht minimiert ausführen.

start /MIN batch.cmd
Brad Gilbert
quelle
3
oder benutze stattdessen / B!
Rany
6

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:

Bildbeschreibung hier eingeben

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.

Djangofan
quelle
3
Verstecktes Kontrollkästchen verbirgt die Aufgabe nur vor der Taskplaner-Benutzeroberfläche (
Sourav Ghosh
Eine Task als "SYSTEM" auszuführen, wenn sie keine "SYSTEM" -Berechtigungen benötigt (und nicht auf Sicherheitslücken geprüft und gehärtet wurde), ist eine schlechte Idee. Siehe die Kommentare hier .
Scott
6

Ich mag keine VBScript-Lösung.

Laden Sie die Datei nircmd.exe herunter und kopieren Sie sie in Ihren %systemroot%\system32Ordner. Fügen Sie dann den folgenden Befehl in die erste Zeile Ihres Stapels ein:

nircmd.exe win hide ititle "cmd.exe"

oder machen Sie Ihren Stapeltitel zuerst mit dem titleBefehl benutzerdefiniert , um zu vermeiden, dass alle cmdFenster wie folgt ausgeblendet werden:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
BijaN-R
quelle
Ich verwende genau diese Methode, aber es ist mir einige Zeit lang nicht gelungen, das Cmd-Fenster nicht auszublenden, sondern nur in die Taskleiste zu minimieren und es durch Anklicken nicht wiederherzustellen. Ich weiß nicht warum ...
James Yang
3

Sie können auch ein AutoHotkey- Skript erstellen :

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

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 );
Schweizer Frank
quelle
1
Richtige Antwort für WINAPI-Ansatz. Hier ist Quellcode und Anwendung als Ergänzung zu Ihrer Antwort.
Alex
3

Der exzellente Bat To Exe Converter konvertiert Ihre .batoder .cmd-Datei in eine .exeDatei.

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).

Achtung: Nur die www.f2ko.de Website Links zu coinhive.com, das ist weit identifiziert als Malware .

BullyWiiPlaza
quelle
2

Ich habe es mit nircmd erfolgreich so gemacht:

  1. Laden Sie nircmd.exe über den 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 im Feld "Nach dem Extrahieren ausführen" den vollständigen Pfad an, in den Ihr .bat extrahiert werden soll. 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.

ZEUS
quelle
1
cmdow /run /hid "file.extention" arg1 "arg 2"
Malak
quelle
3
Bitte fügen Sie eine kurze Erklärung des Befehls bei. Dies könnte dem OP (und anderen) helfen, zu verstehen, wie es funktioniert, anstatt nur den Befehl zu kopieren und zu verwenden.
BloodPhilia
'cmdow' is not recognized as an internal or external command, operable program or batch file.
Bacco
1

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.

sgmoore
quelle
1

Hinzufügen meiner Antwort hier aus einem anderen Beitrag, da es ein Duplikat war und ich diese Lösung hier nicht sehe, so gibt es jetzt 17 verschiedene Antworten, wie Sie eine versteckte Batch-Datei ausführen können. Ich werde meine Antwort auf diesen Beitrag in naher Zukunft löschen.

Erstellen Sie Ihre Batch - Skript mit Batch - Logik und Befehle in ihm, und dann eine neue Datei mit erstellen .VBSErweiterung, verwenden Sie die folgende Logik (Beispiel I unten angegeben) und schließen Sie einfach den vollständigen Pfad zu Ihrem .CMDoder .BATmit der Datei PING -t <IPAddress>usw. Befehle so Es führt den Stapel auf versteckte Weise aus und zeigt das Befehlsfenster nicht an, wenn es ausgeführt wird.

Wo die Logik im folgenden Beispiel angibt, C:\Folder\BatchFileName.cmdändern Sie dies, um mit Ihren Befehlen, die Sie jetzt manuell ausführen, usw. auf das Stapelskript zu verweisen.

Speichern Sie die .VBSDatei und planen Sie sie mit Task Scheduler Probleme beim Planen einer Aufgabe unter Windows7 , damit sie nach einem unbestimmten Zeitplan für Ihre Anforderungen ausgeführt wird.

Andernfalls doppelklicken Sie einfach auf die .VBSDatei, um den unbegrenzten PINGBefehl auszuführen, den Sie in die Batch-Datei eingegeben haben, auf die Sie bei Bedarf zeigen.

ANMERKUNG: Ich glaube, hierher stammt diese Skriptlogik, aber sie funktioniert zuverlässig für denselben Zweck, den Sie hier benötigen, um sicherzustellen, dass das Befehlsfenster ausgeblendet ist, wenn eine Batchdatei ausgeführt wird. Serverfehlerquelle

BEISPIEL VBS SCRIPT RUN BEFEHLSZEILENBATCH, DER CMD-FENSTER AUSBLENDET

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

Hier habe ich alle Möglichkeiten zusammengestellt, die ich kenne, um einen versteckten Prozess mit Batch ohne externe Tools zu starten PID wird zurückgegeben. Verwendete Tools sind IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process und JScript.Net

npocmaka
quelle
1

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 .netCode). 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
npocmaka
quelle
0

Ich hatte das gleiche Problem, fand es aber heraus:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)

Alan Panayotov
quelle
0

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
Djangofan
quelle
0

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.vbsund 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. So muss zum Beispiel C:\Program Files\myprogram.batals verwiesen werden C:\Progra~1\myprogram.bat. Verwenden Sie, um den 8.3-Dateinamen anzuzeigendir /x

bortao
quelle
0

Ich habe RunApp dafür erstellt und benutze es auch in meiner Produktionsumgebung. Ich hoffe, es hilft.

Die Konfiguration wie folgt:

Datei: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Und runapp.exestattdessen starten .

James Yang
quelle
-1

Dies funktioniert für Windows 8 (möglicherweise andere)

  1. Erstellen Sie wie gewohnt eine Batch-Datei
  2. Erstellen Sie eine Verknüpfung zur Stapeldatei
  3. Klicken Sie mit der rechten Maustaste auf die Verknüpfung> Eigenschaften
  4. Klicken Sie auf Layout
  5. Deaktivieren Sie "Fenster Systemposition lassen"
  6. Stellen Sie die linke Position auf -1000
  7. Klicken Sie auf Übernehmen

  8. Klicken Sie auf die Verknüpfung und es wird ausgeführt, aber Sie werden es nicht sehen :)

Andrew
quelle
4
"Ja wirklich?" Dies wird nicht als Schaltfläche in der Taskleiste angezeigt.
Scott