Wie erstelle ich eine Windows-Batchdatei, in der die Eingabeaufforderung bei der Ausführung nicht angezeigt wird? [Duplikat]

56

Ich habe einen Rubinstein namens Redcar installiert, der von der Kommandozeile aus gestartet wird. Wenn es ausgeführt wird, stiehlt es die Shell, bis es beendet wird. Daher muss ein neues Shell-Fenster erstellt werden, um die Befehlszeilenarbeit fortzusetzen. Die von mir verwendete Shell ist die GITBash-Shell von MySysGit.

Ich habe eine Redcar.bat-Datei gefunden, die dazu gedacht ist, Redcar als Verknüpfung zu starten, aber ich möchte nicht, dass das zusätzliche Eingabeaufforderungsfenster geöffnet wird, wenn ich die BAT-Datei starte.

Wie starte ich das BAT, ohne die Eingabeaufforderung zu sehen?

Jake
quelle
1
Ich wünschte, ich wüsste die Antwort auf diese +1 für eine gute Frage.
Nicht Kyle hört auf, mich zu
@ Kyle eine ähnliche Frage gestellt wurde , bevor superuser.com/questions/191149/how-to-execute-cmd-exe-silently HSTART- erwähnt und kurz erwähnt , dass eine VBS - Datei , um sie starten kann
barlop
Können Sie Ihre ausgewählte Antwort aktualisieren? Ist es möglich und sehr einfach, wenn Sie wissen, wie .. Batch-Datei: Zeile 1: set var1=hello.txtZeile 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown
Verwenden Sie einfach ::oder @REM. Quelle: superuser.com/a/843754/101936
PHPst

Antworten:

38

Dies ist nicht möglich. Wenn Sie eine Batchdatei mit der eingebauten Eingabeaufforderung ausführen, bleibt ein Fenster geöffnet, bis die Batchdatei beendet wird.

Sie können lediglich Maßnahmen ergreifen, um sicherzustellen, dass die Batchdatei so schnell wie möglich beendet wird. Wenn möglich, ändern Sie die Batch-Datei so, dass mit dem startBefehl ein beliebiges Programm ausgeführt wird. Standardmäßig wird startsofort zurückgegeben, ohne auf das Beenden des Programms zu warten, sodass die Batchdatei weiterhin ausgeführt und vermutlich sofort beendet wird. Wenn Sie die Verknüpfung so ändern, dass die Batchdatei minimiert wird, wird nur die Taskleiste angezeigt, ohne dass ein Fenster auf dem Bildschirm angezeigt wird.

Eine Einschränkung besteht darin, dass die Batch-Datei auf das Beenden des Programms wartet und startein neues Konsolenfenster erzeugt , wenn Sie ein Programm im Konsolenmodus ausführen, das viele Skriptinterpreter verwenden . In diesem Fall müssen Sie die Windows-basierte Version des Interpreters anstelle der konsolenbasierten Version ausführen - dies ist nicht starterforderlich. Für Perl würden Sie wperl.exestatt ausführen perl.exe. Für Python ist es pythonw.exeanstelle von python.exe. Die alte Ruby-Distribution von Win32, die ich heruntergeladen habe rubyw.exe, sollte dasselbe tun.

Eine letzte Möglichkeit besteht darin, ein Drittanbieter-Tool zu verwenden, um die Eingabeaufforderung mit einem ausgeblendeten Fenster auszuführen. Ich habe von solchen Dingen gehört, konnte sie aber nie gebrauchen, daher weiß ich nichts Besonderes, auf das ich Sie hinweisen könnte.

afrazier
quelle
Danke, das beantwortet meine Frage. Was wirklich ärgerlich war, war nicht, dass das Eingabeaufforderungsfenster angezeigt wurde, sondern dass es geöffnet bleiben musste, solange das Programm lief. Jetzt ist der Blitz absolut erträglich und bei weitem nicht so nervig. Überprüft, ob ich das Skript so ändern kann, dass rubyw anstelle von ruby ​​ausgeführt wird.
Jake
1
Vielen Dank, dass Sie den Unterschied zwischen "python" und "pythonw" erklärt haben. Endlich habe ich die Lösung gefunden, um die Python-Fenster-Tools auszuführen, die wir ohne die Eingabeaufforderung im Hintergrund haben.
FP
"Java.exe" und "javaw.exe" sind identisch.
Redbeam_
Sie können - nur nicht im Batch-Code selbst. wirklich gibt es eine Reihe von Qs ist hier mit As darüber , wie die Eingabeaufforderung zu verbergen superuser.com/questions/62525/... superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop
21

Ich denke, dies ist die einfachste und kürzeste Lösung, um eine Batch-Datei auszuführen, ohne das DOS-Fenster zu öffnen. Es kann sehr störend sein, wenn Sie eine Reihe von Befehlen für die regelmäßige Ausführung planen möchten . Verwenden Sie ein VB-Skript, um die Batch-Datei aufzurufen ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Kopieren Sie die obigen Zeilen in einen Editor und speichern Sie die Datei mit der Erweiterung .VBS. Bearbeiten Sie den Namen und den Pfad der .BAT-Datei entsprechend. Dann starte einfach die .vbs-Datei und die Magie ist da!

Indago
quelle
8

Sie können eine andere Batchdatei mit START / MIN CMD.EXE / C mybatchfile.bat über die Eingabeaufforderung ausführen.

Von außen wird das cmd-Konsolenfenster angezeigt. Um dies zu vermeiden, können Sie eine Verknüpfungsdatei mit Eigenschaften erstellen , die so geändert wurden, dass sie minimiert werden .

vhanla
quelle
2
In Windows 8.1 befindet sich diese Option unter Eigenschaften -> Registerkarte Verknüpfung -> Ausführen: -> Minimiert (Standard ist "Normales Fenster")
Pix
5

Verwenden Sie dazu das Programm Bat To Exe Converter , um Ihre Batch-Datei in eine ausführbare Datei zu konvertieren.

Beim Konvertieren in eine ausführbare Datei finden Sie im Bereich Sichtbarkeit eine Option zum Ausführen Ihrer Datei als unsichtbare Anwendung . Wenn Sie es also ausführen, wird es ohne Fenster ausgeführt.

Fledermaus zur Exe

Root hier bitte nicht ...
quelle
Die Website erfordert, dass Ihr Computer Krypto-Captcha "löst". Hier ist das Programm nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks
4

Wenn Sie Dennis Williamsons Antwort fortsetzen, können Sie die Batch-Datei bearbeiten und START /Ban den Befehl, den Sie ausführen, anhängen (voranstellen) .

Zum Beispiel habe ich eine Batch-Datei, die putty ausführt und das gleiche Problem hat (extra CMD). So habe ich es geschrieben:

@ECHO AUS
START / B putty.exe -Lade den Namen meiner Konfigurationsdatei

Es hat perfekt funktioniert.

Adonis Darwish
quelle
4

Probieren Sie es aus:

START /B batchfile

note von barlop hinzugefügt

Start /? sagt von / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.
Dennis Williamson
quelle
3
Das könnte funktionieren, wenn ich eine Eingabeaufforderung geöffnet habe, aber wenn ich die .bat-Datei verwende, doppelklicke ich darauf oder verwende eine Verknüpfung dazu auf meinem Desktop. Ich versuche zu vermeiden, eine Eingabeaufforderung zu haben, um dieses Programm zu starten.
Jake
3

Ihr Problem ist mir nicht klar, aber bei einigen meiner Batch-Dateien verwende ich einen "Dumy", dessen einziger Zweck darin besteht, die Haupt-Batch-Datei zu starten.

GO.BAT wird also haben:

cmd /c go2.bat %1 %2 %3
exit

Der Exit schließt das Eingabeaufforderungsfenster, das sonst geöffnet bleiben würde.

Und GO2.BAT wird den eigentlichen Inhalt der Batch-Datei haben, den ich mir wünsche.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...
therube
quelle
3

Sie könnten RunHiddenConsole verwenden

hideExec.bat

@echo off
RunHiddenConsole batch.bat
Jens A. Koch
quelle
1

Wenn Sie immer noch daran interessiert sind, das Konsolenfenster überhaupt nicht anzuzeigen, ist hier eine Lösung von stackoverflow, die für mich funktioniert hat (in meinem Fall habe ich nichts in die Registrierung aufgenommen, aber wo ich es brauchte).

Raviolli
quelle
0

Stellen Sie einfach den Schalter / b vor den Pfad. Die zweite Eingabeaufforderung wird nicht geöffnet.

Jesse
quelle
0

Indagos Antwort war für mich bisher die beste Lösung. Mit der VBS-Datei kann ich die Funktionalität des Stapels über das Skript ausführen und so verhindern, dass das CMD-Fenster überhaupt erst auftritt. Es gibt jedoch ein paar Einschränkungen:

  1. Wenn für Ihren Stapel Administratorrechte erforderlich sind, erstellen oder verwenden Sie einen vorhandenen Stapel, der den VBS aufruft, und führen Sie diesen Stapel als Administrator aus.

  2. Ohne Sichtbarkeit kann es schwierig sein zu erkennen, ob das, was Sie versuchen, tatsächlich so läuft, wie Sie es möchten.

Nachdem dies gesagt wurde, würde ich zuerst einen kleinen Mock-Setup / Unit-Test durchführen, um sicherzustellen, dass es genau so funktioniert, wie Sie es möchten, bevor ich es integriere.

kayleeFrye_onDeck
quelle
0

Ich habe cmdow in der Vergangenheit verwendet und es scheint so zu funktionieren, wie ich es will.

Möglicherweise möchten Sie eine der folgenden Optionen verwenden: CMDOW [window] /HID

/HID verbirgt das angegebene Fenster

CMDOW [window] /END

/END Schließt das angegebene Fenster

CMDOW [window] /CLS

/CLS bat höflich das Fenster zu schließen (einige Fenster öffnen möglicherweise ein Dialogfeld)

Hoffe das hilft.

sonrad10
quelle
-5

Erstellen Sie einfach eine Verknüpfung zur Stapeldatei, klicken Sie mit der rechten Maustaste darauf, klicken Sie auf Properties, wechseln Sie zur GeneralRegisterkarte, aktivieren Sie das Kontrollkästchen Hidden, klicken Sie auf Applyund dann auf OK.
Jetzt, wenn Sie die Verknüpfung öffnen, wird die Batch-Datei Hidden ausgeführt.

MagicalDiamonds
quelle
Dies ist falsch, da nur die Verknüpfung / Batch-Datei ausgeblendet wird, während der Benutzer eine Batch-Datei wünscht, die unsichtbar ausgeführt werden soll.
Root hier bitte nicht ...