Windows-Batch-Skript-Startprogramm und Exit-Konsole

88

Ich habe ein Batch-Skript, mit dem ich ein Programm starte, z notepad.exe. Wenn ich auf diese Batchdatei doppelklicke, wird der Editor normal cmdgestartet , aber das schwarze Fenster desjenigen, der gestartet hat, notepad.exebleibt im Hintergrund. Was muss ich tun, notepad.exeum das cmd-Fenster zu starten und verschwinden zu lassen?

Bearbeiten : ist komplizierter als die Verwendung \I.

Die cmdAnrufe cygwinund cygwinstartet notepad. ich benutze

start \I \path\cygwin\bin\bash.exe

und das erste Fenster (cmd) verschwindet, aber ein zweites Fenster (\ cygwin \ bin \ bash.exe) befindet sich noch im Hintergrund. Im Cygwin-Skript habe ich verwendet notepad.exe &und dann beendet.

Possa
quelle

Antworten:

202
start "" "%SystemRoot%\Notepad.exe"

Behalten Sie den ""Zwischenstart und Ihren Anwendungspfad bei.


Erklärung hinzugefügt:

Wenn wir ein Programm aus einer Batch-Datei wie unten starten, sehen wir normalerweise die schwarzen Fenster im Hintergrund, wie OP sagte.

%SystemRoot%\Notepad.exe

Dies wurde dadurch verursacht, dass Notepad in derselben Eingabeaufforderung (Prozess) ausgeführt wurde. Die Eingabeaufforderung wird geschlossen, nachdem der Editor geschlossen wurde. Um dies zu vermeiden, können wir den startBefehl verwenden, um einen separaten Prozess wie diesen zu starten.

start %SystemRoot%\Notepad.exe

Dieser Befehl ist in Ordnung, solange er keinen Platz im Pfad hat. Um Platz im Pfad für alle Fälle zu schaffen, haben wir die "Anführungszeichen wie folgt hinzugefügt .

start "%SystemRoot%\Notepad.exe"

Das Ausführen dieses Befehls würde jedoch nur eine weitere leere Eingabeaufforderung starten. Warum? Wenn Sie nach dem suchen, erkennt start /?der startBefehl das Argument zwischen dem "als Titel der neuen Eingabeaufforderung, die gestartet werden soll. Um das zu lösen, haben wir den Befehl wie folgt:

start "" "%SystemRoot%\Notepad.exe"

Das erste Argument von ""ist das Setzen des Titels (den wir als leer setzen), und das zweite Argument von "%SystemRoot%\Notepad.exe"ist der auszuführende Zielbefehl (der Leerzeichen im Pfad unterstützt).

Wenn Sie dem Befehl Parameter hinzufügen müssen, fügen Sie sie einfach in Anführungszeichen an, dh:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 
Prüfsumme
quelle
10
Hinweis: Wenn Sie eine Java-JAR-Datei auf diese Weise starten möchten, stellen Sie sicher, dass Sie die javawausführbare Datei verwenden (nicht nur java, da dadurch javaein weiteres start "" "javaw" -jar C:\JavaProject\myApp.jar
Stapelfenster
@checksum Könnten Sie bitte auch Ihr Beispiel erweitern, wie der Standardfehler und die Standardausgabe der gestarteten Anwendung umgeleitet werden?
Seestern
@Starfish Ich denke, Notepad haben nicht stdout und stderr. Aber für Ihre Frage wäre es so etwas wie application.exe > stdout.txt 2>stderr.txt. Das Hinzufügen Ihrer Frage zur obigen Antwort würde von der Frage des Originalplakats abweichen. Möglicherweise können Sie eine neue Frage starten, um sie detaillierter zu stellen.
Prüfsumme
Völlig sinnlose Lösung. Windows gewinnt erneut.
Ярослав Рахматуллин
9

Verwenden Sie start notepad.exe.

Mehr Infos mit start /?.

Benoit
quelle
1
Und genau welches Argument? /B? Ich habe es gelesen, aber wenn ich start /B notepad.exedas cmd-Fenster benutze, verschwindet es nicht.
Possa
Ok, ist komplizierter als zu benutzen \I. Der cmd-Aufruf cygwin und cygwin starten den Editor. Ich benutze start \I cygwinund das erste Fenster verschwindet, aber ein zweites Fenster ist noch im Hintergrund. In Cygwin-Skript habe ich notepad.exe &und dannexit
Possa
cygstart startet den Editor, aber die Konsole bleibt im Hintergrund.
Possa
5

%ComSpec% /c %systemroot%\notepad.exe

MrBogus
quelle
Dies schließt nicht das cmd-Fenster%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic
4

Der einfachste Weg ist, damit zu beginnen start

start notepad.exe

Hier finden Sie weitere Informationen zustart

Brüder28
quelle
1

Hmm ... ich mache es in einer meiner Batch-Dateien wie folgt, ohne CALL oder START zu verwenden:

%SystemRoot%\notepad.exe ..\%URI%
GOTO ENDF

Ich habe Cygwin jedoch nicht installiert und bin unter Windows XP.

Djangofan
quelle
Fehler "The system cannot find the batch label specified - ENDF"unter Windows 10
jcubic
0
start "" ExeToExecute

Die Methode funktioniert bei Xilinx xsdk nicht, da es sich, wie von @jeb in den Kommentaren unten ausgeführt, tatsächlich um eine Fledermausdatei handelt.

Was de facto nicht funktioniert, ist

start "" BatToExecute

Ich versuche xsdk so zu öffnen und es öffnet sich ein separates cmd, das geschlossen werden muss und xsdk kann alleine ausgeführt werden

Vor dem Starten von xsdk führe ich die Env / Paths (mit settings64.bat ) aus (Quelle) , damit der Befehl xsdk.bat erkannt wird (einfach als xsdk, ohne die .bat ).

Was funktioniert mit .bat

call BatToExecute
Tomasz Janicki
quelle
2
Dies beantwortet wahrscheinlich eine Frage, aber nicht diese. Die Frage betrifft das Starten einer EXE-Datei ( notepad.exe) durch Entkoppeln von der Datei cmd.exe. Sie antworten, wie Sie eine .bat-Datei in derselben Instanz
starten
-3

Versuche zu beginnen path\to\cygwin\bin\bash.exe

yyyx
quelle
1
Dies beantwortet die OP-Frage nicht wirklich. Er fragte nicht, wie er anfangen sollte cygwin.
Jeremy J Starcher