Из командной строки — как рассчитать время выхода из программы?

Из командной строки — как рассчитать время выхода из программы?

Я хочу найти способ использовать командную строку, чтобы закрыть программу, скажем, за 60 секунд. Подобно выключению компьютера по времени (shutdown /s /t) и taskill.

Есть идеи? Это возможно?

решение1

Как закрыть программу, скажем, через... 60 секунд?

Вы можете использовать pingили timeoutдля создания задержки по времени.

  • timeoutнедоступно в Windows XP.
  • timeoutдает вам обратный отсчет.

pingрешение

Чтобы убить notepadчерез 60 секунд, используйте следующую команду:

ping 127.0.0.1 -n 61 > nul && taskkill /im notepad.exe

Примечание:

  • Вам нужно 61 пинг, так как между ними есть задержка в 1 pingсекунду.

Пример:

F:\test>time /t && ping 127.0.0.1 -n 61 > nul && taskkill /im notepad.exe && time /t
17:56
SUCCESS: Sent termination signal to the process "notepad.exe" with PID 8084.
17:57

Задержка также может быть вызвана командой PING с адресом обратной связи, между каждым последующим пингом есть задержка в 1 секунду. В тестах PING потребляет меньше процессорного времени, чем Sleep.exe или Timeout.exe, это позволяет другим процессам работать в фоновом режиме. Команду PING можно прервать только с помощью Ctrl-C. Источник: Clay Calvert (usenet 2001.)

например, для задержки в 40 секунд:

ПИНГ -n 41 127.0.0.1>ноль

Источниктайм-аут


timeoutрешение

Чтобы убить notepadчерез 60 секунд, используйте следующую команду:

 timeout /t 60 && taskkill /im notepad.exe

Примечания:

  • timeoutнедоступно в Windows XP.
  • timeoutплохо реализовано. Если вы сделаете "тайм-аут 1", он будет ждать до "следующей секунды", которая может произойти через .1 секунды. Попробуйте сделать "тайм-аут 1" несколько раз и посмотрите разницу в задержке. Для 5 секунд или больше это может быть не так уж важно, но для задержки в 1 секунду это работает плохо.

Пример:

F:\test>time /t && timeout /t 60 && taskkill /im notepad.exe && time /t
18:07

Waiting for  0 seconds, press a key to continue ...
SUCCESS: Sent termination signal to the process "notepad.exe" with PID 5412.
18:08

Дальнейшее чтение

решение2

Попробуйте использоватьДиспетчер задач.

  1. Настройте ведение журнала событий таким образом, чтобы событие возникало при запуске нужной программы.
  2. Настройте запланированную задачу для запуска при регистрации определенного события из #1. В запланированной задаче можно установить задержку (в вашем случае 60 секунд) и запустить любые команды/скрипты.

решение3

Попробуйте мой пример:

choice /t 5 /d a /c ab /n >nul & taskkill /im URprocess.exe

Объяснение: «choice» ждет 5 секунд и завершает работу, затем taskkill закрывает «URprocess»

решение4

Я использую scriptrunner.exe, поставляемый с Windows 10. Мне пришлось искать свой, его не было в пути. Вы можете найти документацию наhttps://ss64.com/nt/scriptrunner.html

Я часто конвертирую кучу электронных книг в epub, но конвертация часто останавливается на полпути. Поэтому я сделал партию со следующим содержанием.

@echo off
for /F "delims=" %%a in (files.txt) do (
  if not exist "%%a.epub" ScriptRunner.exe -appvscript "c:\Program Files (x86)\calibre2\ebook-convert.exe" "%%a" "%%a.epub" -appvscriptrunnerparameters -timeout=60
  if exist "%%a.epub" del "%%a"
)

Files.txt содержит все файлы с путями, которые необходимо преобразовать. Я использую ebook-convert.exe из calibre для выполнения преобразования. Аргумент -timeout=60 — это время в секундах (здесь 60), после которого выполнение останавливается, если преобразование будет готово раньше, выполняется следующая строка.

Все это работает хорошо.

Связанный контент