Многие компьютерные проблемы решаются с использованием интерпретатора командной строки – этот архаизм, доставшийся Windows от предшественницы, операционной системы MS-DOS, оказался настолько живучим, что и в эру тотального графического интерфейса находит частое применение.
Существует два сценария использования командной строки:
- вы запускаете терминальное окно, и уже в нём вводите необходимые команды, завершая работу командой exit;
- вы используете готовый файл (cmd или bat). В этом случае командная строка запускается автоматически и так же самостоятельно закрывается после того, как все команды скрипта отработали.
Последний вариант весьма удобен с пользовательской точки зрения, поскольку минимизирует его усилия. Но у него имеется один существенный недостаток: зачастую команды отрабатываются столь быстро, что вы не успеваете рассмотреть результаты работы батника. А в большинстве случаев это и полезно, и нужно.
Сегодня мы рассмотрим все возможные способы, позволяющие предотвратить такой не совсем удовлетворительный сценарий.
Почему сразу после запуска команды окно командной строки быстро закрывается и что предпринять, чтобы помешать этому
Как мы уже отмечали, правильный способ использования командной строки – запуск интерпретатора командой cmd из консоли «Выполнить», и последующий ввод команд вручную.
Увы, многочисленные инструкции, гуляющие в сети, игнорируют эту рекомендацию и советуют пользователям вводить нужные текстовые команды непосредственно в панели «Выполнить». И наивные пользователи свято верят в то, что используют командную строку правильно. На самом деле это не так. После ввода команды в окно «Выполнить» (которое в Windows 10/11 запускается нажатием ПКМ по кнопке «Пуск», а в версиях ОС ниже – использованием комбинации Win+R) и нажатия Enter действительно происходит запуск командной строки и отработка самой команды. Но если результат работы введённой команды таков, что не требует никаких действий от пользователя, окно КС после этого сразу закроется. И это происходит в абсолютном большинстве случаев, даже если в ходе выполнения команды нужно нажимать какие-то клавиши.
Точно такой же порядок действий получится при запуске bat-файла с единственным отличием: в таком батнике можно прописать последовательное выполнение любого количества команд. Но результат будет аналогичным: если самими командами не предусмотрено наличие каких-то пауз, то после их выполнения окно с чёрным экраном сразу закроется. Независимо от того, успели вы заметить, что произошло, или нет.
При ручном открытии КС сначала запустится окно терминала, в котором нужно ввести команду или набор команд. В этом случае командная строка после выполнения этих команд не закрывается. То есть у вас появится возможность внимательно изучить результаты отработки скрипта или команды, и только после этого закрыть терминальное окно, набрав exit и нажав Enter (или просто щелкнув мышкой по крестику в правом верхнем углу окна терминала).
Но что делать, если инструкция требует запуска bat-файла (двойным кликом по нему), а вам нужно, чтобы после отработки сценария окно не закрывалось, поскольку там будут отражены результаты работы скрипта?
Самый очевидный способ – сначала запустить интерпретатор командной строки, а уже в нём указать полный путь к bat-файлу, после чего нажать Enter. Если вы не ошиблись с указанием этого пути (в конце обязательно должно стоять наименование файла с его расширением), что случается достаточно часто, то результат вас удовлетворит: команда будет выполнена, а окно терминала после этого не закроется.
Основная сложность здесь в том и заключается, что нужно знать, в какой папке находится нужный файл, и правильно ввести этот путь.
Есть и другой способ, хотя и он потребует от вас некоторых нетривиальных действий, а конкретнее – правки этого батника. Делается это посредством запуска любого текстового редактора (например, Блокнота). От вас потребуется в конце файла добавить строку и ввести команду pause.
Команда pause приостанавливает выполнение последовательности команд с выводом в окно терминала текста «Для продолжения нажмите любую клавишу…». Таких команд может быть много, в результате продолжение выполнения скрипта вплоть до его закрытия будет происходить только после нажатия вами какой-нибудь клавиши.
Такой же результат получится, если в конце батника добавить строку cmd /k.
При этом вы как бы перезапускаете КС, то есть результаты выполнения предыдущих команд будут стёрты. В этом плане использование pause будет предпочтительнее.
Самопроизвольное открытие и закрытие командной строки
Когда вы являетесь инициатором запуска КС, что делать, чтобы она не закрывалась, мы уже рассмотрели. Но наверняка каждый из вас сталкивался с ситуацией, когда пресловутое чёрное окно открывается и закрывается без вашего ведома, а что в нём происходило, заметить практически невозможно. Чаще всего такие запуски случаются во время старта операционной системы, но иногда они происходят в самый неожиданный момент без видимых причин (хотя на самом деле причины обязательно имеются, например, такой сценарий прописан в одном из фоновых процессов).
Если командная строка самопроизвольно открывается и закрывается лишь изредка, то, скорее всего, это связано с работой операционной системы, и волноваться по этому поводу не следует. Подобная активность часто проявляется при выполнении обновлений Windows или в результате настройки работы её служб, требующих для завершения процесса запуска команд в режиме интерпретатора командной строки.
Такой же результат может быть следствием процедуры инсталляции или удаления пользователем компьютера некоторых программ, часто – после перезагрузки системы.
Если командная строка открывается и закрывается часто, почему это происходит, нужно обязательно выяснить.
Для начала следует проверить, какие программы присутствуют в автозагрузке, не мешает проинспектировать и планировщик заданий. Если вы найдёте строку, начинающуюся с cmd.exe с указанием параметров после этого текста, то это, скорее всего, и есть причина запуска КС. Чтобы убедиться в этом, отключите строку в Автозагрузке, убрав справа галочку, и сделайте то же самое в Планировщике. Если запуски командной строки прекратятся, а работа операционной системы останется стабильной, подозрительные строки можно удалить навсегда.
Если это не поможет, стоить запустить полное сканирование компьютера антивирусной программой, встроенной или установленной вами. Не исключено, что наблюдаемые запуски командной строки – результат работы вируса.
Можно также попробовать автоматизировать процесс, чтобы командная строка, независимо от того, вы её запустили, операционная система или вирус, не закрывалась в конце. Для этого потребуется внести определённые правки в реестр – то есть способ рекомендуется только для опытных пользователей.
Итак, запускаем командой regedit редактор системного реестра и переходим по пути
HKCRbatfileshellopencommand.
По умолчанию для этой ветки установлен единственный параметр со значением
"%1" %*
Его нужно заменить на
cmd.exe /k "%1" %*
Точно такие же манипуляции производим с веткой HKCRcmdfileshellopencommand.
В результате любой запуск командной строки не будет завершаться без вашего согласия, если только в скрипте не присутствуют команды exit.