Як запобігти автоматичному закриттю консолі після виконання пакетного файлу


509

Яку команду можна поставити в кінці пакетного файлу, щоб запобігти автоматичному закриттю консолі після виконання файлу?


5
Було б добре, якщо є спосіб виявити, чи було .cmd файл запущений подвійним клацанням миші в провіднику (тоді ви хочете, щоб він призупинився в кінці) або якщо він був запущений вже відкритим командним рядком. У пізнішому випадку (і особливо якщо він виконаний іншою програмою) ви не хочете робити паузу. Я не знайшов хорошого рішення для цього випадку (і зазвичай використовую змінну if% NOPAUSE%, але це працює лише для батьківських програм, а не для оболонок paremt).
eckes

1
EM0

Відповіді:


634

У пакетних файлах Windows / DOS:

pause

Це друкує приємне "Press any key to continue . . . "повідомлення

Або, якщо ви не хочете "Press any key to continue . . ."повідомлення, зробіть це замість цього:

pause >nul

14
Жодна із пропозицій тут не працює для мене, коли двічі клацніть файл bat. Це серверне середовище (і я повинен запустити скрипт у ньому), щоб вони могли змінити поведінку. Це не змінює мою мету. Щоб вікно команд було відкритим, щоб я міг надіслати повідомлення про помилку, яке воно набирає.
Генрік Ерландссон

1
Так, це не завжди працює в залежності від навколишнього середовища. Для більш надійного рішення дивіться мою відповідь нижче. По суті, просто встановіть / p exitkey = "Натисніть будь-яку клавішу для продовження ..."
Стівен Марк Форд

Будьте обережні, якщо хтось запустить ваш скрипт без вікна консолі (наприклад, через vbscript), він би зависав, поки ви не вб'єте його через диспетчер завдань.
Андрі

Якщо його щось на зразок Maven використовуйте CALL, stackoverflow.com/a/52205298/4485678
Кевін Рой

тут прекрасно працює пауза
Davidson Lima

141

Залежить від точного питання!

Зазвичай pauseвиконує завдання у файлі .bat .

Якщо ви хочете, щоб cmd.exe не закривався, щоб мати можливість вводити текст, використовуйте cmd /kкоманду в кінці файлу.


2
Якщо ви виконуєте команди Windows через діалогове вікно Запуск, cmd /kзамість цього поставте команду. & cmd /kне буде працювати.
Номенон

68

Якщо ви хочете, щоб cmd.exe не закривався, і можете продовжувати вводити, скористайтеся cmd /k

Щойно відчув необхідність уточнити, що /kробить (із веб-сайту Windows):

/k : Виконує команду, задану рядком, і продовжує.

Отже cmd /kбез подальшої команди в кінці файлу bat просто збереже cmd.exeвікно відкритим для подальшого використання.

З іншого боку, pauseв кінці пакетного файлу процес буде просто призупинити процес і закінчитися cmd.exeпри натисканні першої кнопки


24

Нижче наведений спосіб наявності команд у пакетному файлі відкриє нові вікна командного рядка, і нові вікна не вийдуть автоматично.

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

2
У моєму випадку у мене виникла помилка під час виконання термінальної команди, і, отже, команди "пауза" та "cmd / k" не допомогли мені зупинити програму. Цей приклад допоміг мені показати, у мене є помилка, а також зупинився на зовсім з терміналу. Дякую!
HowDoYouTellForAChild

19

Якщо ви використовуєте Maven і хочете пропустити введення тексту та запобігти закриттю консолі, щоб побачити результат, вам потрібно використовувати CALLкоманду в сценарії, окрім лише 'mvn clean install'.

Так буде закривати консоль

ECHO This is the wrong exemple
mvn clean install
pause

Так, консоль залишиться відкритою

ECHO This is the right exemple
CALL mvn clean install
pause

Якщо ви не використовуєте CALLкоманду, жоден із прикладів минулого не працюватиме.


1
Дуже дякую! Це запобігає закриттю підказки, якщо команда не вдалася.
Тимур Гілаурі

1
Це працювало для мене. Я хотів виконати команду 2 різниці у файлі 1 bat. але моє підказка закрилося після першої команди. Постановка call <myCommand>вирішила цю проблему: Мій
підказник зупинився

1
Найкорисніша відповідь
gianmarcocalbi

14

Додати cmd.exeновий рядок під кодом, який потрібно виконати:

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

cmd.exe

Це саме те, що я шукав, дякую! "Пауза" просто не спрацює, коли ваш сценарій python стане збоєм. Що я хотів - це побачити повідомлення про помилку. До цих пір мені довелося запускати свої скрипти python через консоль
user70960

Але це працює чудово:python script.py %1 && cmd
user70960

Дякую! Це допомогло! Я створював пакетний файл для запуску програм python.
fez.tival

10

мій спосіб - написати фактичну партію (кажучи "foo.bat"), щоб закінчити роботу; тоді створіть інший "start.bat":

@echo off
cmd /k foo.bat

Я вважаю, що це надзвичайно корисно, коли я встановлюю одноразові змінні середовища.


1
Ви можете просто поставити cmd /k(без жодної команди) в кінець foo.batфайлу і запустити це. Вам не потрібен окремий start.batфайл.
ADTC


5

до того ж pause.

set /p=

можна очікувати, що користувач введе і вивільнить потік при натисканні клавіші Enter.

або

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

який буде робити те саме, за винятком того, що нічого з вводу користувача не відображатиметься і не залишатиметься в історії команд.


3

Можливість 1: Просто створіть 2 .bat файли і запишіть у перший:

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

Пакетний файл 2 - це файл, який в кінці кінця не закриється. Тож тепер, коли ви відкриєте партію №1, вона запустить 2-ю та закриє себе. Коли 2-е завершується, він не закриється повністю (до тих пір, поки ви не будете ставити вихід в кінці)

Можливість 2: Пакетний файл 1:

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

Коли другий файл закінчиться, він знову перейде до файлу 1 і виведе решту його. З цим ви навіть можете зробити оброблювачів помилок. Якщо nr.1 виходить з ладу, він переходить у nr.2 і відображає його


2

Цей маленький хак просить користувача ввести ключ і зберігає його в змінну% exitkey% (ця змінна може називатися все, що вам подобається).

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

Примітка: простір після '=' дуже важливий



2

Я знаю, що спізнююсь, але мій кращий спосіб:

:programend
pause>nul
GOTO programend

Таким чином користувач не може вийти за допомогою enter.


Я думаю, що так, оскільки це вдосконалений спосіб запобігти закриттю консолі. Навіть якщо користувач натисне клавішу, консоль залишається відкритою. Користувач буде змушений виходити лише закривши вікно консолі.
декаденса

2

Тут виникли проблеми з відповідями, тому я придумав це, що працює для мене (TM):

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

1

Є два способи зробити це залежно від випадку використання

1) Якщо ви хочете, щоб підказки Windows cmd залишалися відкритими, щоб ви могли побачити результат виконання та закрити його згодом; використання

pause

2) якщо ви хочете, щоб підказки Windows cmd залишалися відкритими і дозволяли вам виконати деякі післязавдання команди; використання

cmd

введіть тут опис зображення


1

Легко, додайте cmd до останнього рядка кажана, АЛЕ! якщо ви скидаєте або очищаєте системний шлях, ви повинні почати свій cmd повним шляхом, наприклад:

%windir%\system32\cmd.exe

Наприклад, у мене є bat-файл, щоб скинути jdk до старої версії на зразок цієї:

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

оскільки я скидаю системний шлях, я повинен запустити cmd з повним шляхом, або система не може знайти cmd.exe, він не запустить cmd і просто закриє вікно, і ви не можете побачити помилку msg .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.