Wie kann ich ein Programm aus einer Batchdatei ausführen, ohne die Konsole nach dem Start des Programms geöffnet zu lassen?

184

Im Moment sieht meine Batch-Datei folgendermaßen aus:

myprogram.exe param1

Das Programm startet, aber das DOS-Fenster bleibt geöffnet. Wie kann ich es schließen?

Herr Dev
quelle
3
Sie sollten wahrscheinlich die akzeptierte Antwort in die von Marshall gepostete ändern.
Rev1.0

Antworten:

163

Sie können das Schlüsselwort exit verwenden. Hier ist ein Beispiel aus einer meiner Batch-Dateien:

start myProgram.exe param1
exit
Patrick Desjardins
quelle
18
Beachten Sie, dass dies nicht hilfreich ist, wenn Sie die Konsole interaktiv verwenden, anstatt nur auf eine Batchdatei zu doppelklicken. Im Allgemeinen ist es wenig bis gar nicht erforderlich, jemals exiteine Batch-Datei zu erstellen.
Joey
26
Ich habe diesen Befehl in Win8 ausprobiert. Ich bin mir nicht sicher, ob es anders ist, aber beachten Sie, dass Sie ihm als ersten Parameter einen Fenstertitel geben müssen. Wenn ich es so ausführen würde, wie Patrick es beschrieben hat, würde es einfach eine neue Eingabeaufforderung mit "myProgram.exe" als Fenstertitel öffnen:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher
8
Beachten Sie, dass Sie, wenn Ihr Befehl Leerzeichen enthält und Sie ihn in Anführungszeichen setzen, einen zusätzlichen Anführungszeichen hinzufügen müssen, da START den ersten Anführungszeichen als Fensternamen und nur den folgenden zweiten Parameter als Befehlsnamen interpretiert.
David Balažic
257

Verwenden Sie den Befehl start, um zu verhindern, dass die Batchdatei auf das Programm wartet. Denken Sie daran, ein leeres Anführungszeichen vor das Programm zu setzen, das Sie nach "Start" ausführen möchten. Wenn Sie beispielsweise Visual Studio 2012 über einen Stapelbefehl ausführen möchten:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

Beachten Sie das doppelte Anführungszeichen nach dem Start.

Marshall
quelle
55
@ SharkAlley Das richtige Format iststart <window name> <program name>
Kruug
5
Dies ist die richtige Antwort. Danke, die leeren doppelten Anführungszeichen sind genau das, was ich brauchte.
Richard
Ich habe ein Sicherungsskript, das ich wöchentlich ausführe und das ich jede Woche geringfügig ändere, um es dazu zu bringen, a) mein Programm zu schließen, b) meine Daten zu sichern und c) das Programm neu zu starten und die Eingabeaufforderung zu schließen. Dies brachte schließlich die Eingabeaufforderung zum Schließen (verhinderte auch, dass meine nächste Sicherung ausgelöst wurde, ich musste diese Eingabeaufforderung schließen !!!).
NobleUplift
@NobleUplift: Für mich hat dies funktioniert. Unten ist die genaue Zeile "Start" "" C: \ Programme (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe "&
Xinus
53

Schauen Sie sich den Befehl START an, Sie können dies tun:

START rest-of-your-program-name

Diese Batch-Datei wartet beispielsweise, bis der Editor beendet wird:

@echo off
notepad c:\test.txt

Dies wird jedoch nicht:

@echo off
start notepad c:\test.txt
Lasse V. Karlsen
quelle
31

Aus meiner eigenen Frage :

start /b myProgram.exe params...

funktioniert, wenn Sie das Programm von einer vorhandenen DOS-Sitzung aus starten.

Wenn nicht, rufen Sie ein vb-Skript auf

wscript.exe invis.vbs myProgram.exe %*

Die Windows Script Host Run () -Methode verwendet :

  • intWindowStyle: 0 bedeutet "unsichtbare Fenster"
  • bWaitOnReturn: false bedeutet, dass Ihr erstes Skript nicht auf den Abschluss Ihres zweiten Skripts warten muss

Hier ist invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
VonC
quelle
1
+1 Es muss einen einfacheren Weg geben, aber dies ist die einzige Antwort, die für mich funktioniert hat.
DN
Danke - diese / b Flagge war genau das, wonach ich gesucht habe.
ap
21

Dies ist das einzige, was für mich funktioniert hat, als ich versucht habe, eine Java-Klasse aus einer Batch-Datei auszuführen:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

Sie können den startBefehl für Ihr Projekt nach Ihren Wünschen anpassen , indem Sie die richtige Syntax befolgen:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)
Zosimas
quelle
18

Sie sollten dies versuchen. Es startet das Programm ohne Fenster. Es blinkt tatsächlich für eine Sekunde, verschwindet aber ziemlich schnell.

start "name" /B myprogram.exe param1
Chris Dail
quelle
4
Die "title"Option ist wichtig. Wenn der Pfad des Programms Leerzeichen enthält, muss er in Anführungszeichen gesetzt werden, daher müssen wir ihn hinzufügen "title", um Fehler zu vermeiden.
AD
1
Wenn Sie das Hauptfenster schließen, wird auch der Hintergrundprozess 'myprogram.exe' geschlossen.
Aditya Gupta
14

So lösen Sie "Platzprobleme" und lokale Abhängigkeiten:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit
Gilco
quelle
Dies ist keine Antwort auf die Frage
jeb
2
stimmt, aber ich denke, es gibt eine gute Lösung, die auch andere Probleme löst, die ich hatte.
Gilco
2
War die Lösung für mich. Das Dos-Fenster wird geöffnet, aber wieder geschlossen, und die Lösung funktioniert. Ich verstehe die Abstimmungen nicht (ich habe gestimmt)
JoeFox
Ich auch. Die Lösung funktioniert und das Problem lösen
Gilco
2

Viele Antworten auf diese Frage, aber ich poste dies, um etwas Wichtiges zu klären, obwohl dies möglicherweise nicht immer der Fall ist:

Start "C:\Program Files\someprog.exe"

Kann in einigen Windows-Versionen zu Problemen führen, da Starterwartet wird, dass der erste Satz von Anführungszeichen ein Windows-Titel ist. Es wird daher empfohlen, zunächst einen Kommentar oder einen leeren Kommentar doppelt zu zitieren:

Start "" "C:\Program Files\someprog.exe"

oder

Start "Window Title" "C:\Program Files\someprog.exe"
Gerhard Barnard
quelle
0

Meine Lösung dazu über die GUI:

  1. Erstellen Sie eine Verknüpfung zu dem Programm, das Sie ausführen möchten.

  2. Bearbeiten Sie die Eigenschaften der Verknüpfung.

  3. Ändern Sie das TARGETFeld in %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Ändern Sie das RUNFeld in minimiert.

Bereit! Sehen Sie, wie es Ihnen gefällt ...

PS: Programmparameter können zwischen die beiden letzten Anführungszeichen eingefügt werden. Die PROGRAMNAMEZeichenfolge kann entweder ein Dateiname, ein relativer oder ein absoluter Pfad sein. Wenn Sie einen absoluten Pfad eingeben und den Laufwerksbuchstaben und das Semikolon löschen, funktioniert dies in einem Thumbdrive, unabhängig davon, welchen Buchstaben der Host-Computer ihm zuweist. (Wenn Sie die Verknüpfung im selben Ordner ablegen und dem Programmdateinamen PROGRAMNAMEdie %CD%Variable voranstellen , stimmen die Pfade immer überein. Der gleiche Trick kann im START INFeld verwendet werden.)

Midas
quelle
0

Wenn Sie diese Batchdatei wie geplant oder immer ausführen möchten; Sie können das Windows-Zeitplan-Tool verwenden und es wird beim Starten der Batch-Datei nicht in einem Fenster geöffnet.

Zum Öffnen Task Scheduler:

  • Start -> Ausführen / Suchen -> 'cmd'
  • Geben Sie taskschd.msc-> eingeben ein

Klicken Sie auf der rechten Seite auf Create Basic Task und folgen Sie den Menüs.

Hoffe das hilft.

Leustad
quelle
0

Hier ist meine bevorzugte Lösung. Es wird aus einer Antwort entnommen auf eine ähnliche Frage .

Verwenden Sie ein VBS-Skript, um die Batchdatei aufzurufen:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Kopieren Sie die obigen Zeilen in einen Editor und speichern Sie die Datei mit der Erweiterung .VBS.

Iljitsch
quelle