Как предотвратить автоматическое закрытие консоли после выполнения командного файла


510

Какую команду я могу поставить в конце командного файла, чтобы предотвратить автоматическое закрытие консоли после выполнения файла?


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

1
EM0

Ответы:


635

В пакетных файлах Windows / DOS:

pause

Это печатает хорошее "Press any key to continue . . . "сообщение

Или, если вы не хотите "Press any key to continue . . ."сообщение, сделайте это вместо:

pause >nul

14
Ни одно из предложенных здесь предложений не работает для меня, если дважды щелкнуть файл bat. Это серверная среда (и я должен запустить скрипт в ней), чтобы они могли изменить поведение. Это не меняет мою цель. Чтобы командное окно оставалось открытым, я могу выводить сообщение об ошибке.
Хенрик Эрландссон

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

Будьте осторожны, если кто-то запустит ваш скрипт без окна консоли (например, через vbscript), он будет зависать, пока вы не убьете его через диспетчер задач.
Андри

Если это что-то вроде maven, используйте CALL, stackoverflow.com/a/52205298/4485678
Кевин Рой

Здесь отлично работает пауза
Дэвидсон Лима

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
В моем случае у меня была какая-то ошибка во время выполнения команды терминала, и поэтому команды 'pause' и 'cmd / k' не помогли мне остановить программу из-за ошибки. Этот пример помог мне показать, у меня есть ошибка, а также остановился совсем из терминала. Спасибо!
HowDoYouTellForAChild

20

Если вы используете 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>решило эту проблему: моя подсказка перестала закрываться после первого выполнения
Zombkey

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: Пакетный файл 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..."

NB: пробел после '=' очень важен



2

Я знаю, что опаздываю, но мой любимый способ:

:programend
pause>nul
GOTO programend

Таким образом, пользователь не может выйти, используя ввод.


Я думаю, да, так как это улучшенный способ предотвращения закрытия консоли. Даже если пользователь нажимает клавишу, консоль остается открытой. Пользователь будет вынужден выйти, только закрыв окно консоли.
decadenza

2

У меня были проблемы с ответами здесь, поэтому я придумал это, который работает для меня (ТМ):

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.