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

319

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

  • 4
    Было бы хорошо, если бы был способ определить, был ли файл .cmd запущен двойным щелчком в проводнике (тогда вы хотите, чтобы он сделал паузу в конце), или если он был запущен уже открытой командной строкой. В последнем случае (и особенно если он выполняется другой программой) вам не нужна пауза. Я не нашел хорошего решения для этого случая (и обычно использую переменную if% NOPAUSE%, но это работает только для родительских программ, а не для оболочек paremt).
  • 0
    Есть способ: stackoverflow.com/questions/3551888/…
Теги:
batch-file
command-line

14 ответов

417
Лучший ответ

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

pause

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

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

pause >nul
  • 7
    Ни одно из предложенных здесь предложений не работает для меня, если дважды щелкнуть файл bat. Это серверная среда (и я должен запустить скрипт в ней), чтобы они могли изменить поведение. Это не меняет мою цель. Чтобы командное окно оставалось открытым, я могу выводить сообщение об ошибке.
  • 1
    Да, это не всегда работает в зависимости от окружающей среды. Для более надежного решения см. Мой ответ ниже. По сути, просто сделайте set / p exitkey = "Нажмите любую клавишу, чтобы продолжить ..."
99

Зависит от точного вопроса!

Обычно pause выполняет задание в файле .bat.

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

  • 7
    Это работает, когда пауза нет.
  • 2
    Если вы запускаете команды Windows через диалоговое окно «Выполнить», вместо этого введите cmd /k перед вашей командой. & cmd /k не будет работать.
35

Если вы хотите, чтобы cmd.exe не закрывался и мог продолжать печатать, используйте cmd /k

Просто почувствовал необходимость уточнить, что делает /k (с сайта Windows):

/k: Выполняет команду, указанную в строке, и продолжает.

Итак, cmd /k без последующей команды в конце файла bat просто сохранит окно cmd.exe для дальнейшего использования.

С другой стороны, pause в конце командного файла просто приостанавливает процесс и завершает cmd.exe при первой кнопке, нажав

11

Добавьте cmd.exe в новую строку под кодом, который вы хотите выполнить:

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

cmd.exe
9

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

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2
  • 1
    В моем случае у меня была какая-то ошибка во время выполнения команды терминала, и поэтому команды 'pause' и 'cmd / k' не помогли мне остановить программу из-за ошибки. Этот пример помог мне показать, у меня есть ошибка, а также остановился совсем из терминала. Спасибо!
6

Вызвать cmd в конце командного файла.

4

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

@echo off
cmd /k foo.bat

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

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

кроме pause.

set /p=

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

или

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

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

0

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

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

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

0

Легко, добавьте cmd в свою последнюю строку летучей мыши, НО! если вы reset или очистите свой системный путь, вы должны запустить свой cmd с полным путем, например:

%windir%\system32\cmd.exe

Например, у меня есть файл bat для reset 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

так как я reset системный путь, я должен запустить cmd с полным путем или система не сможет найти cmd.exe, он не сможет запустить cmd и просто закроет окно, t см. сообщение об ошибке.

0

Есть два способа сделать это зависит от варианта использования

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

pause

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

cmd

Изображение 7243

0

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

:programend
pause>nul
GOTO programend

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

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

Возможность 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

type

pause

чтобы показать:

press any key to continue...

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

pause>nul

Ещё вопросы

Сообщество Overcoder
Наверх
Меню