Jak zapobiec automatycznemu zamykaniu konsoli po wykonaniu pliku wsadowego


509

Jakie polecenie mogę umieścić na końcu pliku wsadowego, aby zapobiec automatycznemu zamknięciu konsoli po wykonaniu pliku?


5
Byłoby dobrze, gdyby istniał sposób na wykrycie, czy plik .cmd został uruchomiony przez dwukrotne kliknięcie w eksploratorze (wtedy chcesz, aby zatrzymał się na końcu) lub jeśli został uruchomiony przez już otwarty wiersz poleceń. W późniejszym przypadku (a zwłaszcza jeśli jest wykonywany przez inny program) nie chcesz przerwy. Nie znalazłem dobrego rozwiązania dla tego przypadku (i zazwyczaj używam zmiennej if% NOPAUSE%, ale działa to tylko dla programów nadrzędnych, a nie dla powłok paremt).
eckes

Odpowiedzi:


634

W plikach wsadowych Windows / DOS:

pause

To ładna "Press any key to continue . . . "wiadomość

Lub, jeśli nie chcesz "Press any key to continue . . ."wiadomości, zrób to zamiast tego:

pause >nul

14
Żadna z sugestii tutaj nie działa dla mnie po dwukrotnym kliknięciu pliku nietoperza. To środowisko serwerowe (i muszę w nim uruchomić skrypt), aby mogli zmodyfikować zachowanie. To nie zmienia mojego celu. Aby okno poleceń było otwarte, więc mogę napisać komunikat o błędzie.
Henrik Erlandsson

1
Tak, to nie zawsze działa w zależności od środowiska. Aby uzyskać bardziej niezawodne rozwiązanie, zobacz moją odpowiedź poniżej. Zasadniczo po prostu ustaw / p exitkey = "Naciśnij dowolny klawisz, aby kontynuować ..."
Steven Mark Ford

Uważaj, jeśli ktoś uruchomi Twój skrypt bez okna konsoli (na przykład przez vbscript), to zawiesi się, dopóki nie zabijesz go za pomocą Menedżera zadań.
Andry

Jeśli to coś jak maven, użyj CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy

pauza działa tutaj doskonale
Davidson Lima

141

Zależy od dokładnego pytania!

Zwykle pausewykonuje to zadanie w pliku .bat .

Jeśli chcesz, aby cmd.exe nie zamykał się, aby móc pisać dalej, użyj cmd /kpolecenia na końcu pliku.


2
Jeśli uruchamiasz polecenia systemu Windows za pomocą okna dialogowego Uruchom, cmd /kzamiast tego umieść je przed poleceniem. & cmd /knie zadziała.
Noumenon

68

Jeśli chcesz, aby cmd.exe nie zamykał się i mógł kontynuować pisanie, użyj cmd /k

Po prostu poczułem potrzebę wyjaśnienia, co /krobi (ze strony Windows):

/k : Wykonuje polecenie określone przez ciąg i kontynuuje.

Więc cmd /kbez polecenia kontynuacji na końcu pliku nietoperza po prostu pozostawi cmd.exeotwarte okno do dalszego użycia.

Z drugiej strony pausena końcu pliku wsadowego po prostu wstrzyma proces i zakończy się cmd.exepo pierwszym naciśnięciu przycisku


24

Poniższy sposób posiadania poleceń w pliku wsadowym otworzy nowe okna wiersza polecenia, a nowe okna nie wyjdą automatycznie.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2
W moim przypadku wystąpił błąd podczas uruchamiania polecenia terminalu, więc polecenia „pauza” i „cmd / k” nie pomogły mi zatrzymać programu z powodu błędu. Ten przykład pomógł mi pokazać, mam błąd, a także zatrzymałem się całkiem z terminala. Dzięki!
HowDoYouTellForAChild

19

Jeśli używasz Maven i chcesz pominąć pisanie i uniemożliwić zamknięcie konsoli, aby zobaczyć wynik, musisz użyć CALLpolecenia w skrypcie, oprócz samej „czystej instalacji mvn”.

W ten sposób zamkniesz konsolę

ECHO This is the wrong exemple
mvn clean install
pause

W ten sposób konsola pozostanie otwarta

ECHO This is the right exemple
CALL mvn clean install
pause

Jeśli nie użyjesz CALLpolecenia, żadna z przeszłych przykładów nie będzie działać.


1
Wielkie dzięki! Zapobiega zamknięciu monitu w przypadku niepowodzenia polecenia.
Timur Gilauri,

1
To zadziałało dla mnie. Chciałem wykonać 2 różne polecenia w 1 pliku nietoperza. ale mój monit został zamknięty po pierwszym poleceniu. Umieszczenie call <myCommand>rozwiązało ten problem: Mój monit przestał się zamykać po pierwszej egzekucji
Zombkey

1
Najbardziej użyteczna odpowiedź
gianmarcocalbi

14

Dodaj cmd.exejako nowy wiersz poniżej kodu, który chcesz wykonać:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe

Właśnie tego szukałem, dzięki! „Pauza” po prostu nie zadziała, gdy skrypt Pythona ulegnie awarii. Chciałem zobaczyć komunikat o błędzie. Do tej pory musiałem uruchamiać skrypty pythonowe za pośrednictwem konsoli
użytkownik70960

Ale to działa dobrze:python script.py %1 && cmd
user70960

Dziękuję Ci! To pomogło! Tworzyłem plik wsadowy do uruchamiania aplikacji w języku Python.
fez.tival

10

moim sposobem jest napisanie rzeczywistej partii (mówiąc „foo.bat”), aby zakończyć zadanie; następnie utwórz kolejny plik „start.bat”:

@echo off
cmd /k foo.bat

Uważam, że jest to niezwykle przydatne, gdy konfiguruję jednorazowe zmienne środowiskowe.


1
Możesz po prostu cmd /k(bez żadnego polecenia) umieścić na końcu foo.batpliku i uruchomić go. Nie potrzebujesz osobnego start.batpliku.
ADTC


5

oprócz pause.

set /p=

można użyć. Oczekuje danych wejściowych od użytkownika i zwolni przepływ po naciśnięciu klawisza enter.

lub

runas /user:# "" >nul 2>&1

który zrobi to samo, chyba że nic z danych wprowadzonych przez użytkownika nie zostanie wyświetlone ani nie pozostanie w historii poleceń.


3

Możliwość 1: Po prostu utwórz 2 pliki .bat i napisz do pierwszego:

start <filename> // name of 2nd batch file
exit

Plik wsadowy 2 to plik, który nie zostanie zamknięty na końcu. Więc teraz, kiedy otworzysz partię nr 1, rozpocznie się druga i sama cloe. Po 2. zakończeniu nie zamknie się całkowicie (o ile nie umieścisz wyjścia na końcu)

Możliwość 2: Plik wsadowy 1:

call <filename>
cls
echo End of file
pause
<any code you want>

Kiedy drugi plik się skończy, przejdzie do pliku 1 i wyśle ​​resztę. Dzięki temu możesz nawet tworzyć programy obsługi błędów. Jeśli nr 1 ulega awarii, przechodzi w nr 2 i wyświetla go


2

Ten mały hack prosi użytkownika o wpisanie klucza i zapisuje go w zmiennej% exitkey% (ta zmienna może być nazywana, co tylko zechcesz).

set /p exitkey= "Press any key to continue..."

Uwaga: spacja po „=” jest bardzo ważna



2

Wiem, że się spóźniam, ale moim ulubionym sposobem jest:

:programend
pause>nul
GOTO programend

W ten sposób użytkownik nie może wyjść za pomocą enter.


Myślę, że tak, ponieważ jest to ulepszony sposób zapobiegania zamykaniu się konsoli. Nawet jeśli użytkownik naciśnie klawisz, konsola pozostaje otwarta. Użytkownik będzie zmuszony wyjść tylko poprzez zamknięcie okna konsoli.
decadenza

2

Miałem problemy z odpowiedziami tutaj, więc wpadłem na to, co działa dla mnie (TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

1

Można to zrobić na dwa sposoby, zależnie od przypadku użycia

1) Jeśli chcesz, aby polecenie cmd systemu Windows pozostało otwarte, abyś mógł zobaczyć wynik wykonania i zamknąć go później; posługiwać się

pause

2) jeśli chcesz, aby polecenie cmd systemu Windows pozostało otwarte i pozwoliło na wykonanie niektórych poleceń po słowie; posługiwać się

cmd

wprowadź opis zdjęcia tutaj


1

Łatwo, dodaj cmd do ostatniej linii nietoperza, ALE! jeśli zresetujesz lub wyczyścisz ścieżkę systemową, musisz uruchomić cmd pełną ścieżką, na przykład:

%windir%\system32\cmd.exe

Na przykład mam plik nietoperza, aby zresetować jdk do starej wersji w następujący sposób:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

ponieważ zresetowałem ścieżkę systemową, muszę uruchomić cmd z pełną ścieżką, inaczej system nie może znaleźć cmd.exe, uruchomienie cmd nie powiedzie się i po prostu zamknę okno, a nie będzie widać błędu msg .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.