Wie führe ich eine Batch-Datei aus, ohne ein "Befehlsfenster" zu öffnen? [Duplikat]

131

Diese Frage hat hier bereits eine Antwort:

Kann ich unter Windows XP eine Batchdatei (.bat oder .cmd) über eine Verknüpfung ohne "schwarzes Fenster" ausführen?

Dugres
quelle
6
Fragen Sie, ob Sie verhindern können, dass das Befehlsfenster beim Ausführen einer bat-Datei angezeigt wird?
Eric
6
Ja, Sie können die Standardfarbe des Ausgabefensters einfach ändern, indem Sie die Eigenschaften einer Verknüpfung mit cmd.exe verwenden. (Ja, das ist ein Witz ...)
Toby J

Antworten:

86

Speichern Sie Folgendes als wscript, beispielsweise hidecmd.vbs, nachdem Sie "testing.bat" durch den Namen Ihrer Stapeldatei ersetzt haben.

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

Der zweite Parameter von oShell.Runist der intWindowStyleWert, der das Erscheinungsbild des Programmfensters angibt, und der Wert Null ist für das ausgeblendete Fenster.

Die Referenz finden Sie hier http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx

Sharjeel Aziz
quelle
Wäre die dritte Zeile: strArgs = "cmd / c FILEPATH \ testing.bat"?
Dan Z
1
Gibt es eine Möglichkeit, den Schläger im erhöhten Modus zu betreiben, während er unsichtbar bleibt?
Laurens Swart
Wie führe .batich die Datei mit dieser Methode als Administrator aus?
Mehdi Dehghani
44

Dies ist nur eine Vereinfachung von Shajis Antwort. Sie können Ihr Batch-Skript über ein VBScript- Skript (.vbs) wie folgt ausführen :

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

Dadurch wird Ihre Batch-Datei ausgeführt, ohne dass ein Befehlsfenster angezeigt wird.

Großwolf
quelle
Wie .batkann ich mit dieser Methode eine Datei als Administrator ausführen ?
Mehdi Dehghani
@MehdiDehghani Eigenschaften> Sicherheit> Als Administrator ausführen. Wenn das nur für Exe oder Apps funktioniert, na ja.
TaylorS
21

Um die Antworten zu "Windows Scripting verwenden" (die ich am besten finde, weil sie bereits integriert sind) zu erweitern, verwenden Sie ein einzelnes Wrapper-Skript und übergeben den Namen der "echten" Batch-Datei als Parameter. Zusätzliche Parameter werden an die Batch-Datei übergeben.

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If

Also zB die obige Datei als NoShell.vbsirgendwo speichern und dann aufrufen:

NoShell.vbs c:\foo\my_batch_file.bat

Wenn Sie dies von einem Ort aus ausführen möchten, der die .vbs-Datei nicht versteht (z. B. "Externe Tools" in Visual Studio), sollten Sie C:\Windows\System32\wscript.exedie vbs-Datei als ersten Parameter und Ihren aufrufen Batch-Datei als zweite.

Toby J
quelle
6
Für diejenigen, die die Idee und das Konzept nicht mögen, für jede neu erstellte Bat-Datei eine neue VBS-Datei zu erstellen, ist dies die perfekte Lösung. Anstelle mehrerer vbs-Dateien stehen Ihnen mehrere Verknüpfungen zur Verfügung. Erstellen Sie für jede neue Bat-Datei eine Verknüpfung der VBS-Datei, klicken Sie mit der rechten Maustaste darauf, wählen Sie "Eigenschaften"> "Verknüpfungen" und geben Sie im Feld "Ziel" den Pfad der Bat-Datei nach dem Pfad ein, der bereits vorhanden ist, wie oben gezeigt oder ähnlich dies , wenn die Verknüpfung ist im selben Ort nicht wie die vbs - Datei: "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat.
Rolo
Wenn der Dateipfad der bat-Datei ein Leerzeichen enthält, wie kann er über eine Verknüpfung zur vbs-Datei aufgerufen werden? Zum Beispiel: "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat. Egal, was ich für den Pfad versuche - doppelte Anführungszeichen um alles,% 20 anstelle des Leerzeichens oder eine Kombination dieser beiden, funktionieren nicht. Ich erhalte eine Fehlermeldung, dass die Datei nicht gefunden werden kann oder nichts passiert. Liegt dies an einem Benutzerfehler auf meiner Seite, einer Windows-Einschränkung mit dem Zielfeld für Verknüpfungen oder einem Problem mit dem vbs-Skript, in dem Dateipfade mit Leerzeichen nicht ordnungsgemäß verarbeitet werden?
Rolo
@Rolo Ich habe das Skript so aktualisiert, dass eingehende Parameter, die Leerzeichen enthalten, in Anführungszeichen gesetzt werden. Wenn Sie den Pfad zur Batch-Datei beim Aufrufen in Anführungszeichen setzen, wird sie als einzelnes Argument betrachtet und vor dem Aufrufen erneut umgebrochen.
Toby J
9

Sie können die Eigenschaften der Verknüpfung so ändern, dass sie minimiert ausgeführt wird.

Um es vollständig unsichtbar auszuführen, benötigen Sie etwas anderes, wie Windows Scripting.

Ale
quelle
1
Ihr erster Vorschlag ist, wie ich es immer gemacht habe.
Martineau
8

Verwenden Sie start mit der Option '/ B'. Zum Beispiel:

@echo off
start /B go.bat
zaf
quelle
25
start /bFührt das Programm nur in der aktuell zugewiesenen Konsole aus, anstatt eine neue zu erstellen. Sie erhalten ohnehin eine neue, da der Stapel mit cmd ausgeführt werden muss (was wiederum [überraschend] eine Konsole öffnet).
Joey
@Joey ja, aber dies ist sehr nützlich, um Batch-Dateien aus anderen Anwendungen durch Shell-Ausführung zu starten (wie SYSTEMin C / C ++).
Tomáš Zato
1
@ TomášZato: In diesem Fall können Sie die Batch-Datei einfach direkt aufrufen oder, falls Sie zum Erzeugen eines Prozesses nicht zuerst eine Shell erstellen, verwenden cmd /c foo.cmd. Es gibt absolut keine Notwendigkeit, startin diesen Szenarien zu verwenden, und ich würde argumentieren, dass dies systemnicht zu Gunsten von verwendet werden sollte CreateProcess. Wenn Sie eine Batch-Datei starten, sind Sie bereits auf eine Plattform angewiesen. Sie können auch die besseren Tools für den Job verwenden.
Joey
@ Joey Vielen Dank, noch nie cmd /czuvor gehört. Der Befehl cmd ist das, was ich in meinem Fall brauchte, aber alle Stapelaustausch-Antworten, die ich bisher über eine Stapeldatei gefunden habe, die eine andere
Stapeldatei ausführt
start /b go.bat nicht eine neue Konsole (- oder einen Faden in CSRSS.exe vor Windows 7 dh eine Instanz von conhost.exe) zuzuteilen. Da das Batch-Skript mit einer neuen Instanz von cmd.exe ausgeführt wird, die an dieselbe Konsole angehängt ist, führt dies jedoch zu Problemen . Beide Instanzen der Shell konkurrieren abwechselnd um das Lesen von Eingaben von der Konsole. Es benötigt /w(zB start /b /w go.bat), um auf die zweite Instanz zu warten, ähnlich wie using cmd /cif using system. Wenn Sie anrufen CreateProcess, können Sie auch go.batdirekt ausführen . Es gibt keine Notwendigkeit dafür cmd /c.
Eryk Sun
6

Freie GPL Open Source "Versteckten Prozess erstellen"

http://www.commandline.co.uk/chp/

Microsoft Security Essentials und wahrscheinlich auch die meisten anderen Viren- / Malware-Scanner behandeln die ausführbare Datei "chp.exe" als Virus, da sie genau wie Viren alle von Ihnen angegebenen Programme vor dem Anzeigen eines Fensters oder einer Taskleistenschaltfläche schützt.

Es ist kein Virus. Der Zielprozess wird nicht ausgeblendet, wenn er beispielsweise im Task-Manager angezeigt wird. Und natürlich ist der Quellcode enthalten, damit Sie sehen können, dass er sehr klein ist und nichts anderes tut, als das Programm auszuführen, das Sie ihm geben.

Sie müssen nicht einmal darauf vertrauen, dass die enthaltene chp.exe wirklich aus dieser Quelle erstellt wurde. Sie können die enthaltene chp.exe verwerfen und Ihre eigene aus dem Quellcode kompilieren. Alle dazu erforderlichen Tools sind sogar kostenlos und können heruntergeladen werden.


Sie können auch einfach eine Verknüpfung zur .bat- oder .cmd-Datei erstellen und dann mit der rechten Maustaste auf die Verknüpfung, Eigenschaften, Registerkarte Verknüpfung, Ausführen: Minimiert klicken. Verwenden Sie dann in geplanten Aufgaben die Verknüpfung anstelle der .bat / .cmd-Datei direkt. Dadurch wird verhindert, dass ein Fenster angezeigt wird, es wird jedoch weiterhin eine Taskleistenschaltfläche angezeigt.

bkw
quelle
6

Sie können Fensterskripte wie AutoIt verwenden .

Schreiben Sie dies zum Beispiel einfach in den AutoIt-Skript-Editor. Es ist ziemlich einfach

Run("C:\test\batchfile.bat", "", @SW_HIDE)

Wenn Sie es in einer Schleife ausführen möchten,

$x=0
Do
 Run("C:\test\batchfile.bat", "", @SW_HIDE)
 Sleep(5000)
Until $x = 1

Kompilieren Sie es als .exe - und Sie sind fertig.


Ebenso in AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
Adrian Yeoh
quelle
5

Verwenden Sie Hidden Start (kostet 20 $)

Versteckter Start - Ausführen von Anwendungen und Stapeldateien ohne ein Konsolenfenster oder eine UAC-Eingabeaufforderung

Konsolenanwendungen und Batchdateien werden regelmäßig beim Start von Windows oder nach einem Zeitplan ausgeführt. Der größte Nachteil dabei ist, dass jede Anwendung ein Konsolenfenster öffnet, das auf dem Bildschirm flackert. Hidden Start (oder Hstart) ist ein einfaches Befehlszeilendienstprogramm, mit dem Sie Konsolenanwendungen und Batchdateien ohne Fenster im Hintergrund ausführen, die Erhöhung der UAC-Berechtigungen unter Windows 7 und Vista verwalten, mehrere Befehle parallel oder synchron starten und vieles mehr .

Bildbeschreibung hier eingeben

Kyle A
quelle
Dies ist eine sehr schön gestaltete und nützliche Anwendung.
Guru Josh
5

Einfache Lösung ohne zusätzliche Programme.

  1. Erstellen Sie die Batchdatei, die Sie ausführen möchten, und testen Sie sie.
  2. Erstellen Sie eine Verknüpfung dafür.
  3. Bearbeiten Sie die Eigenschaften der Verknüpfung: Wählen Sie auf der Registerkarte Verknüpfung die Option Minimiert ausführen. Weisen Sie ihm einen Hotkey zu und Sie sind fertig!

Viel Glück!

Willem
quelle
7
Dies ist keine Lösung für das OP-Problem. Es gibt einen Unterschied zwischen Minimizing und Verstecken
nixda
Wenn Sie die Verknüpfung ändern, um das richtige Symbol zu verwenden, ist der minimierte Splash in der Taskleiste eine nette Erinnerung, dass etwas beginnt.
Wer
Das ist eine schöne und saubere Lösung für mein Problem! Danke!
Dmitry_romanov
Minimieren ... hehe.
Gumuruh