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

510

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

Джо
источник
5
Было бы хорошо, если бы был способ определить, был ли файл .cmd запущен двойным щелчком в проводнике (тогда вы хотите, чтобы он сделал паузу в конце), или если он был запущен уже открытой командной строкой. В последнем случае (и особенно если он выполняется другой программой) вам не нужна пауза. Я не нашел хорошего решения для этого случая (и обычно использую переменную if% NOPAUSE%, но это работает только для родительских программ, а не для оболочек paremt).
Eckes
1
Есть способ: stackoverflow.com/questions/3551888/…
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
user6928445
источник
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
9

Позвоните cmdв конце командного файла.

user4155296
источник
5

кроме того pause.

set /p=

Может быть использован. Он будет ожидать ввода пользователя и освободит поток при нажатии Enter.

или

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

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

npocmaka
источник
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 и отображает его

BlazeLP
источник
2

Этот маленький хакер просит пользователя ввести ключ и сохранить его в переменной% exitkey% (хотя эта переменная может называться как угодно).

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

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

Стивен Марк Форд
источник
2

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

:programend
pause>nul
GOTO programend

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

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

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

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
lama12345
источник
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 ,

Вей Клефф
источник