Pozostaw CMD otwarty po uruchomieniu pliku BAT

169

Mam taki plik nietoperza:

ipconfig

Spowoduje to wydrukowanie informacji IP na ekranie, ale zanim użytkownik będzie mógł odczytać te informacje, CMD zamyka się.

Uważam, że CMD zakłada, że ​​skrypt się skończył, więc zamyka się.

Jak utrzymać otwarty CMD po zakończeniu skryptu?

pattyd
źródło
4
@RobKielty to samo pytanie w porządku - ale tutaj mamy nową odpowiedź (która jest lepsza IMHO)
alfasin
@alfasin Czy to nie to samo, co odpowiedź Rutgera Nijlunsinga?
Rob Kielty
@RobKielty nie, moja odpowiedź nie jest taka sama, jak jej nie używa, pauseco jest miłym obejściem (i dlatego głosowałem za tą odpowiedzią), ale nie takim, które naprawdę rozwiązuje problem, ponieważ po kliknięciu przez użytkownika Enterlub Spaceokno się zamknie. ..
alfasin

Odpowiedzi:

163

W zależności od tego, jak uruchamiasz polecenie, możesz wstawić /kpo, cmdaby okno pozostało otwarte.

cmd /k my_script.bat

Wystarczy dodać cmd /kplik na końcu pliku wsadowego. Podziękowania dla Luigiego D'Amico, który opublikował o tym w komentarzach poniżej.

Jason Schindler
źródło
14
Po wszystkich skryptach w pliku nietoperza - wstaw -> cmd / k
Luigi D'Amico
3
Uważaj, jeśli twój program zawiera błędy składniowe, okno nadal będzie zamknięte, jeśli uruchomisz je przez dwukrotne kliknięcie i umieścisz cmd /kna końcu.
Tobias Feil
Nie wyjaśnia to zamykania okien cmd, jeśli użytkownik kliknął dwukrotnie plik.
K - Toksyczność SO rośnie.
237

Umieść pausena końcu pliku .BAT.

ElGavilan
źródło
7
Dokładnie tego szukałem, ponieważ uruchamiam plik bat podczas uruchamiania, a nie za pomocą polecenia CMD. +1
Hawkeye
3
Jeśli nadal chcesz wchodzić w interakcję z plikiem bat po wykonaniu, zamień PAUSE na tylko cmd / k - wtedy po uruchomieniu skryptów nadal możesz uruchamiać ręczne polecenia w tym samym kontekście
Luigi D'Amico
Nie mogę znieść tego, że nie było to „rozwiązanie” komentarza na to pytanie
newhouse
57

Po prostu dodaj @pausena końcu.

Przykład:

@echo off
ipconfig
@pause

Możesz też użyć:

cmd /k ipconfig
ZygD
źródło
5
co robi symbol @? Czy jest różnica między @pause a pause?
demonicdaron
3
@demonicdaron Odpowiedź wyjaśniająca symbol @: stackoverflow.com/a/21077142/2258
Richard Morgan
Ale w tym przypadku nie powinno to robić żadnej różnicy.
Florian Leitgeb
Różnicę między @pausei pausemożna zobaczyć wizualnie w tej odpowiedzi: stackoverflow.com/questions/17957076#60053224
ZygD
7

Dodawanie pausew (Windows 7) na końcu nie działało,
ale dodanie cmd /kprzed moim poleceniem działało.

Przykład:

cmd /k gradlew cleanEclipse
Rudzik
źródło
7

Gdy plik .bat jest uruchamiany nie z poziomu wiersza poleceń (np. Dwukrotne kliknięcie).

echo The echoed text
@pause

at_pause

echo The echoed text
pause

pauza

echo The echoed text
cmd /k

cmd k

echo The echoed text & pause

and_pause

ZygD
źródło
3

start cmd /kzrobił dla mnie magię. Właściwie użyłem go do przygotowania aplikacji cordova phonegap, uruchamia polecenie, pokazuje wynik i czeka, aż użytkownik je zamknie. Poniżej znajduje się prosty przykład

start cmd /k echo Hello, World!

Czego użyłem w moim przypadku

start cmd /k cordova prepare

Aktualizacja

Możesz nawet mieć tytuł, używając

start "My Title" echo Hello, World!

jafarbtech
źródło
1

Jeśli uruchamiasz skrypt w wierszu poleceń, dodaj, exit /baby pozostawić otwarty CMD

Julito Sanchis
źródło
To praktycznie nie rozwiązuje problemu, ponieważ modyfikowanie ipconfigi inne wbudowane pliki wsadowe to bardzo zły pomysł .
robinCTS
1

W systemie Windows dodaj „& Pause” na końcu polecenia w pliku.

samadadi
źródło
1

Byłem również zdezorientowany, dlaczego dodajemy cmdna początku i zastanawiałem się, czy muszę najpierw otworzyć wiersz polecenia. To, co musisz zrobić, to wpisać pełne polecenie wraz z cmd /k. Na przykład załóżmy, że nazwa pliku wsadowego to „my_command.bat”, która uruchamia polecenie, javac my_code.javaa kod w pliku wsadowym powinien mieć postać :

cmd /k javac my_code.java

Zasadniczo nie ma potrzeby otwierania wiersza polecenia w bieżącym folderze i wpisywania powyższego polecenia, ale możesz zapisać ten kod bezpośrednio w pliku wsadowym i wykonać go bezpośrednio.

RustyCake
źródło
0
javac -d C:\xxx\lib\ -classpath C:\xxx\lib\ *.java

cmd cd C:\xxx\yourbat.bat

drugie polecenie sprawi, że okno cmd nie zostanie zamknięte. Ważne jest to, że nadal możesz wprowadzić nowe polecenie

Huanfasdawq Huanfasd
źródło
0

Na marginesie działa to również podczas uruchamiania polecenia bezpośrednio z paska wyszukiwania w systemie Windows.

np. bezpośrednie uruchomienie ipconfigspowoduje bezpośrednie zamknięcie okna cmd po zakończeniu działania polecenia.

wprowadź opis obrazu tutaj

Używanie cmd \k <command>nie będzie - co właśnie próbowałem zrobić, kiedy znalazłem tę odpowiedź.

wprowadź opis obrazu tutaj

Ma dodatkową zaletę polegającą na tym, że zawsze rozpoznaje polecenie, które próbujesz uruchomić. Na przykład uruchomienie echo hello worldz paska wyszukiwania nie zadziała, ponieważ nie jest to polecenie, ale cmd \k echo hello worlddziała dobrze.

sommmen
źródło