No Image

Bat файл не закрывать окно после выполнения

СОДЕРЖАНИЕ
362 просмотров
10 марта 2020

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

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

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

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

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

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

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

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

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

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

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

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

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

Если вы используете Maven и хотите пропустить ввод и не допустить закрытия консоли, чтобы увидеть результат, вам нужно использовать команду CALL в скрипте, кроме просто "mvn clean install".

Как это закроет консоль

Так консоль будет оставаться открытой

Если вы не используете команду CALL , ни один из примеров вставки не будет работать.

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

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

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

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

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

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

Возможность 1: Просто создайте 2 файла .bat и напишите в первую:

Пакетный файл 2 – это файл, который не закрывается в конце. Итак, теперь, когда вы открываете партию № 1, она начнет 2-й и сам гной. Когда второй заканчивается, он не будет полностью закрываться (до тех пор, пока вы не положите выход в конце)

Возможность 2: Пакетный файл 1:

Когда второй файл заканчивается, он снова переходит к файлу 1 и выводит оставшуюся часть. С этим вы даже можете сделать обработчики ошибок. Если nr.1 сбой, он переходит в nr.2 и отображает его

Monday, March 7, 2016

Предотвращение закрытия окна коммандной строки после выполнения bat файла

Время от времени тебе хочется автоматизировать какой-либо процесс, который повторяется изо дня в день. Это может быть запуск локального веб сервера, redis сервера или ещё что-то.
Один из вариантов, чтобы не вбивать полный путь к программе, которую нужно запустить это в проводнике найти эту папку, затем нажать правой кнопкой мыши и выбрать пункт "Open command window here". Затем нужно достать из закромов длинную-длинную команду с путём к конфиг файлу и остальными параметрами, вставить в консоль и запустить. В общем долго и много телодвижений.
Второй вариант это написать эти все действия в bat файл. Это вариант уже лучше. Стандартное поведение такое: вы запускаете bat файл, он отрабатывает и сразу закрывает себя. Т.е. если нужно прочитать что наш скрипт там наделал или (не дай Бог!) ошибки, окно просто закроется. Что делать?
Довольно часто при запуске в коммандной строке можно увидеть надпить Press Any Key to Continue. Логично делать такую штуку в самом конце, когда нужно просмотреть лог скрипта, чтобы убедиться, что сервер стартанул например и можно работать. Делается это при помощи команды PAUSE. Например:
echo ‘Doing some important stuff. ‘
PAUSE

Читайте также:  Правила охраны труда при работе с компьютером

Другой вариант: у командной строки есть ключ /K. Он позволяет запустить батник, и после этого просто не закрывать окно коммандной строки. Например,
cmd /K test.bat

Для удобства можно сделать ярлык, в котором прописать путь к батнику и /K.
Надеюсь поможет кому-нибудь 🙂

Моя проблема в том, что в Windows есть окна командной строки, которые закрываются сразу после выполнения. Чтобы решить эту проблему, я хочу, чтобы поведение по умолчанию состояло в том, что окно остается открытым. Обычно этого поведения можно избежать с помощью трех методов, которые мне приходят в голову:

  1. Поместите строку pause после пакетных программ, чтобы предложить пользователю нажать клавишу перед выходом
  2. Запуск этих командных файлов или других инструментов управления командной строкой (даже запуск службы, перезапуск и т. д. с помощью net start xy или что-то подобное) в пределах cmd.exe (Start – Run – cmd.exe)
  3. Запуск этих программ с помощью cmd /k следующим образом: cmd /k myprogram.bat

Но есть и другие случаи, в которых пользователь:

  1. Запускает программу в первый раз и не знает, что данная программа будет запущена в командной строке (Windows Command Processor), например. при запуске ярлыка из меню «Пуск» (или из другого места), OR
  2. Найти немного неудобно для запуска cmd.exe все время и не имеет времени /возможности переписать код этих команд всюду, чтобы поставить паузу после них или избежать выхода в явном виде.

Я прочитал статью об изменении поведения по умолчанию cmd.exe при открытии его явно, с созданием Запись AutoRun и управление его содержимым в этих местах:

(Элементы автозапуска _String values_ . )

Я поместил cmd /d /k в качестве значения, чтобы попробовать, но это не изменило поведение упомянутых материалов выше всего . Он просто изменил поведение окна командной строки при открытии его явно (Start-Run-cmd.exe).

Читайте также:  Hp probook 4530s отзывы

Итак, как это работает? Можете ли вы дать мне какие-либо идеи для решения этой проблемы?

11 ответов

У меня есть решение, которое может применяться только к .cmd и .bat :

Откройте regedit и перейдите к каждому из них:

Теперь измените значение «Значение по умолчанию» на cmd.exe /k "%1" %* . Теперь каждое окно пакетного скрипта останется открытым после его выполнения.

Обратите внимание, что это похоже на использование cmd.exe /c cmd.exe /k program.bat , что означает, что другой экземпляр CMD будет запущен в родительский. Я не мог найти, как перезаписать первый аргумент /c .

Вы также можете сделать это с помощью [exefile] , но теперь он отобразит пустой консольный блок, если исполняемый файл имеет графический интерфейс.

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

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

(Для 16-разрядных MS-DOS-программ Windows предлагает в диалоговом окне свойств параметр «Закрыть при выходе», но это не является исключением из вышеприведенного поведения: это процесс NTVDM, который закрывает окно. Кроме того, эта опция снова для каждой программы.)

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

1. Перейдите в папку, в которой находится ваш исполняемый файл. 2.Shift-Щелкните правой кнопкой мыши и выберите «Окно команд отсюда»
3.type в имени исполняемого файла и нажмите Enter
4. Процесс должен выполняться, но окно должно оставаться открытым.

cmd.exe /k даст вам проблемы с некоторыми партиями. Если пакет exit 1 (без /B ) ваша консоль будет закрыта. Трюк заключается в том, чтобы использовать:

Чтобы использовать это по умолчанию для всех пакетных файлов, установите HKEY_CLASSES_ROOTcmdfileshellopencommand(default) и HKEY_CLASSES_ROOTatfileshellopencommand(default) до "%windir%system32cmd.exe" /k "%windir%system32cmd" /c "%1" %* .

Я просто нажал на немое решение после прочтения ответа grawity .

Мой вариант использования – это настройка среды консоли на работе, где блокируются все более разумные решения. Все, что мне нужно, это установить PATH и настроить некоторые псевдонимы doskey и быть сброшенными в оболочку.

Мое решение (только что протестированное на Win7) как добавить cmd в качестве последней строки в пакетном файле. Это запускает вложенную командную строку, которая наследует среду его родителя. Эта дочерняя оболочка хранит пакетный процесс открытым до тех пор, пока вы не выйдете, и в этот момент пакет не имеет дочерних процессов и также выходит.

Вместо использования PAUSE (я предпочитаю CHOICE или TIMEOUT использовать PAUSE при необходимости), вы можете использовать это решение здесь: 886848 /как в изготовление витрины-пакетный файл пауза-когда-двойной щелчок .

Читайте также:  Hp compaq 2510p характеристики

Таким образом, если вы нажмете на пакетный файл или ссылку (ярлык) из проводника Windows, вы можете приостановить программу пакетного файла перед ее выходом, чтобы вы могли просматривать вывод программы и любые сообщения об ошибках.

Используя CHOICE, вы можете запрограммировать возможность выбора пользователем различных действий, и использование TIMEOUT позволяет закрыть окно после задержки (без присмотра). Если вы запускаете командный файл из окна командной строки, эти паузы могут быть раздражающими.

Связанное решение позволит вам решить, хотите ли вы пропустить паузы, если пакетный файл был запущен из окна командной строки.

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

, чтобы определить, был ли командный файл запущен из окна команд или нет.

Итак, вы используете его следующим образом:

В момент выхода командного файла вы добавите следующий код:

Лучший способ, который я нашел, чтобы обойти это, – вызвать ваши командные файлы из другого командного файла с помощью start.

, поэтому, если вы обычно запускаете файл с именем go.bat, тогда вы создадите второй командный файл с именем go2.bat

содержимое go2.bat будет просто

первое окно немедленно закрывается, но тот, который запускает ваш go.bat, остается открытым

Это работает для версии 5.00 редактора реестра Windows.

Сохраните указанные выше cmds в файле, который называется что-то вроде cmdbatfile-open.reg и выполните его!

Предположим, у вас есть два командных файла, которые вы хотите запустить в своем собственном экземпляре, и не открывайте их, если их исполняемый файл выйдет. Позволяет называть эти две партии A.bat и B.bat .

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

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

Для пользователей, использующих Windows 10, обратите внимание, что ни один из вышеперечисленных ответов не работает в Windows 10.

Для Windows 10, если у вас есть доступ к скрипту, вам нужно добавить следующий код в конце:

Этот код будет ждать ввода перед закрытием.

В ответ на пониженную PSIXO – «Этот ответ уже был рассмотрен в вопросе. – Ro Yo Mi Jan 20 ’16 at 5:06" — Нет, не было. Предыдущие ответы были: «пауза», которая НЕ работала. Ответ PSIXO был: «& pause», который работает. Пожалуйста, проанализируйте более тщательно перед понижением. Я запускал это из приглашения IDLE, и он работал:

С другой стороны:

НЕ работал (запрос cmd перевернулся, и на самом деле вернул ошибку (1)). Спасибо PSIXO за ответ, который мне нужен. Генри.

Комментировать
362 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector