it-swarm.com.de

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

Im Moment sieht meine Batch-Datei so aus:

myprogram.exe param1

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

164
Mister Dev

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

start myProgram.exe param1
exit
148

Verwenden Sie den Startbefehl, um zu verhindern, dass die Batchdatei auf das Programm wartet. Denken Sie daran, vor dem Programm, das Sie nach "Start" ausführen möchten, ein leeres doppeltes Anführungszeichen vorzulegen.

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

beachten Sie das doppelte Anführungszeichen nach dem Start. 

218
Marshall

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

START rest-of-your-program-name

Diese Batchdatei wartet beispielsweise, bis der Editor beendet ist:

@echo off
notepad c:\test.txt

Dies wird jedoch nicht:

@echo off
start notepad c:\test.txt

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-Methode Run () nimmt:

  • intWindowStyle: 0 bedeutet "unsichtbare Fenster"
  • bWaitOnReturn: false bedeutet, dass Ihr erstes Skript nicht warten muss, bis das zweite Skript abgeschlossen ist

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
29
VonC

Dies ist das einzige, was für mich funktioniert hat, als ich versuchte, eine Java-Klasse aus einer Batchdatei auszuführen:

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

Sie können den Befehl start wie gewünscht für Ihr Projekt anpassen, indem Sie der richtigen Syntax folgen:

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)
18
Zosimas

Sie sollten es versuchen. Es startet das Programm ohne Fenster. Es blitzt für eine Sekunde auf, geht aber ziemlich schnell weg.

start "name" /B myprogram.exe param1
18
Chris Dail

So lösen Sie "Weltraumproblem" 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
12
Gilco

Meine Lösung dazu aus der 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 Feld TARGET in %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Ändern Sie das Feld RUN in minimiert.

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

PS: Programmparameter können zwischen den beiden letzten Anführungszeichen eingefügt werden. Die PROGRAMNAME-Zeichenfolge kann entweder ein Dateiname, ein relativer oder ein absoluter Pfad sein. Wenn Sie einen absoluten Pfad eingeben und den Laufwerkbuchstaben und das Semikolon löschen, funktioniert dies mit einem Thumbdrive, unabhängig davon, welchen Buchstaben der Host-Computer ihm zuweist. .. (auch wenn Sie die Verknüpfung in demselben Ordner ablegen und dem Dateinamen des Programms in PROGRAMNAME die Variable %CD% voranstellen, stimmen die Pfade immer überein; derselbe Trick kann im Feld START IN verwendet werden).

0
Midas

Wenn diese Batchdatei etwas ist, das Sie wie geplant oder immer ausführen möchten; Sie können das Windows-Zeitplanungsprogramm verwenden, und es wird beim Starten der Stapeldatei nicht in einem Fenster geöffnet. 

Task Scheduler öffnen:

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

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

Hoffe das hilft.

0
Leustad

Hier ist meine bevorzugte Lösung. Es wird aus einer Antwort zu einer ähnlichen Frage genommen.

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.

0
Ilyich

Ich hatte dieses Problem und folgendes funktionierte für mich:

run myprogram.exe param1
0
nikc