Skrypt wsadowy systemu Windows uruchamia program i wychodzi z konsoli

90

Mam skrypt wsadowy, którego używam do uruchamiania programu, na przykład notepad.exe. Kiedy klikam dwukrotnie ten plik wsadowy, Notatnik uruchamia się normalnie, ale czarne okno programu, cmdktóry uruchomił, notepad.exepozostaje w tle. Co muszę zrobić, aby uruchomić notepad.exei zniknąć okno cmd?

edycja : jest bardziej skomplikowana niż używanie \I.

Do cmdwywołania cygwini cygwinrozpoczyna notepad. używam

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

i pierwsze okno (cmd) znika, ale drugie okno (\ cygwin \ bin \ bash.exe) nadal działa w tle. W skrypcie cygwin użyłem, notepad.exe &a następnie zakończyłem.

Possa
źródło

Odpowiedzi:

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

Zachowaj odstęp ""między początkiem a ścieżką aplikacji.


Dodano wyjaśnienie:

Zwykle, gdy uruchamiamy program z pliku wsadowego, jak poniżej, w tle będziemy mieć czarne okna, jak powiedział OP.

%SystemRoot%\Notepad.exe

Było to spowodowane działaniem Notatnika w tym samym wierszu polecenia (procesie). Wiersz polecenia zostanie zamknięty PO zamknięciu notatnika. Aby tego uniknąć, możemy użyć startpolecenia, aby rozpocząć oddzielny proces, taki jak ten.

start %SystemRoot%\Notepad.exe

To polecenie jest w porządku, o ile nie ma miejsca na ścieżce. Aby obsłużyć spację w ścieżce na wszelki wypadek, dodaliśmy takie "cudzysłowy.

start "%SystemRoot%\Notepad.exe"

Jednak uruchomienie tego polecenia spowodowałoby po prostu uruchomienie kolejnego pustego wiersza polecenia. Czemu? Jeśli spojrzysz na polecenie start /?, startpolecenie rozpozna argument między "jako tytuł nowego wiersza polecenia, który ma zamiar uruchomić. Aby to rozwiązać, mamy takie polecenie:

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

Pierwszym argumentem ""jest ustawienie tytułu (który ustawiliśmy jako pusty), a drugim argumentem "%SystemRoot%\Notepad.exe"jest polecenie docelowe do uruchomienia (obsługujące spacje w ścieżce).

Jeśli chcesz dodać parametry do polecenia, po prostu dodaj je w cudzysłowie, tj .:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 
suma kontrolna
źródło
12
uwaga: jeśli chcesz uruchomić plik jar java w ten sposób, upewnij się, że używasz javawpliku wykonywalnego (nie tylko java, ponieważ javauruchomi kolejne okno wsadowe): np.start "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron
@checksum Czy mógłbyś również rozszerzyć swój przykład o przekierowanie standardowego błędu i standardowego wyjścia uruchamianej aplikacji?
Rozgwiazda
@Starfish Myślę, że notatnik nie ma stdout i stderr. Ale jeśli chodzi o twoje pytanie, to byłoby coś takiego application.exe > stdout.txt 2>stderr.txt. Dodanie pytania do powyższej odpowiedzi odbiegałoby od pytania pierwotnego autora. Być może możesz zacząć nowe pytanie, aby zadać bardziej szczegółowe informacje.
suma kontrolna
1
Całkowicie bezsensowne rozwiązanie. Windows znowu wygrywa.
Ярослав Рахматуллин
9

Użyj start notepad.exe.

Więcej informacji z start /?.

Benoit
źródło
1
A jaki dokładnie argument? /B? Czytałem, ale jeśli używam start /B notepad.exeokna cmd, nie znika.
Possa
Ok, jest bardziej skomplikowane niż używanie \I. Polecenie cmd wywołuje cygwin, a cygwin uruchamia notatnik. Używam start \I cygwini pierwsze okno znika, ale drugie okno nadal jest w tle. W skrypcie cygwin użyłem, notepad.exe &a następnieexit
Possa
cygstart uruchamia notatnik, ale konsola pozostaje w tle.
Possa
5

Najprościej jest po prostu zacząć start

start notepad.exe

Tutaj można znaleźć więcej informacji na tematstart

bracia 28
źródło
4

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

MrBogus
źródło
to nie zamyka okna cmd%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic
0

Hmm ... robię to w jednym z moich plików wsadowych w ten sposób, bez użycia CALL lub START:

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

Nie mam jednak zainstalowanego Cygwina i używam Windows XP.

djangofan
źródło
"The system cannot find the batch label specified - ENDF"
Wystąpił
0
start "" ExeToExecute

metoda nie działa u mnie w przypadku Xilinx xsdk, bo jak zauważył @jeb w komentarzach poniżej, jest to plik bat.

więc to, co nie działa de facto, jest

start "" BatToExecute

Próbuję otworzyć xsdk w ten sposób i otwiera osobne cmd, które należy zamknąć, a xsdk może działać samodzielnie

Przed uruchomieniem xsdk uruchamiam (źródło) Env / Paths (z settings64.bat ), aby polecenie xsdk.bat zostało rozpoznane (po prostu jako xsdk, bez pliku .bat )

co działa z .bat

call BatToExecute
Tomasz Janicki
źródło
2
To prawdopodobnie odpowiada na pytanie, ale nie na to. Pytanie dotyczy uruchomienia pliku .exe ( notepad.exe) z odłączeniem go od cmd.exe. Odpowiadasz, jak uruchomić plik .bat w tej samej instancji
jeb
-4

Spróbuj zacząć path\to\cygwin\bin\bash.exe

rrrx
źródło
1
To tak naprawdę nie odpowiada na pytanie PO. Nie pytał, jak zacząć cygwin.
Jeremy J Starcher