Команда пакетного завершения работы со всплывающим окном времени

#user-interface #batch-file #popup #shutdown

#пользовательский интерфейс #пакетный файл #всплывающее #завершение работы

Вопрос:

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

 shutdown -s -f -t 120
  

но, допустим, я хочу завершить работу не через две минуты, а через пять или десять?

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

Я сам не очень разбираюсь в технике, но вот как я себе это представляю: пользователь запускает файл .bat, и ему выдается всплывающее окно с запросом, сколько времени осталось до завершения работы. Пользователь вводит ‘5’ и нажимает ‘enter’. Затем пакетный файл принудительно закрывает все открытые программы и завершает работу через 300 секунд (5 минут).

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

Я видел, как это делается, но cmd окно большое и громоздкое.
(Необязательно: каким-либо образом включите функцию прерывания завершения работы в тот же пакетный файл.)
[Я знаю, что могу использовать shutdown -a для отдельного пакетного файла, но это просто неинтересно.]

Редактировать: Аналогично следующему коду, за исключением того, что он выключает компьютер после истечения таймера. Кроме того, с гораздо меньшим cmd размером, если это возможно?

 @ECHO off
cls
color 0B
:taskkill
echo.
echo.
echo.
echo.
echo.               
echo.               
echo.               
echo.               
echo.               
echo.
echo                                Program To Shutdown
echo.    
set /p taskkill=                      
if "%taskkill%" == "%taskkill%" goto taskkillconfirm
exit
:taskkillconfirm
color 0B
:image
set image=/im
if "%image%" == "%image%" goto imageconfirm
exit
:imageconfirm
color 0B
:forced
set forced=/f
if "%forced%" == "%forced%" goto forcedconfirm
exit
:forcedconfirm
:hour
color 0B
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.                                   Hours?:
echo.
set /p hour=                                      
:min
color 0B
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                   Minutes?:
echo.
set /p min=                                      
:sec
color 0B
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                                   Seconds?:
echo.
set /p sec=                                      
:continue
color 0B
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                           %taskkill%  Shutdown in
echo.                                                             
echo                         %hour%  Hours  %min%  Minutes  %sec%  Seconds
set /a sec="%sec%-1"
if %sec%==-1 set /a min="%min%-1"
if %sec%==-1 set /a sec="59"
if %min%==-1 set /a hour="%hour%-1"
if %min%==-1 set /a min="59"
if %hour%==-1 goto done
ping -n 2 127.0.0.1 >NUL
goto continue
:done
color 0B
cls
taskkill %image% %taskkill% %forced%
exit
  

Кроме того, что вообще делает приведенный выше код?

Ответ №1:

Вот краткий пакетный скрипт, который я собрал. Он запрашивает у пользователя ввод в минутах и преобразует ввод в секунды, чтобы начать завершение работы. Затем она останавливает завершение работы, если нажата какая-либо клавиша.

custom_shutdown.bat

 @echo off
title Custom Shutdown

REM Ask the user for input and convert minutes to seconds
set /P minutes="Enter shutdown delay in minutes: "
set /A seconds="%minutes%*60"

REM Start windows' shutdown command
echo Starting shutdown...
shutdown -s -f -t %seconds%

REM Cancel shutdown on keypress
echo.
echo Press any key to cancel the shutdown
pause>nul
shutdown -a
echo Shutdown canceled!

pause
exit
  

Невозможно использовать всплывающие окна для запроса у пользователя ввода с помощью стандартных пакетных команд. Используя дополнительные приложения или VBScripts, вы можете отображать всплывающие окна. Ознакомьтесь с этой страницей для получения дополнительной информации о всплывающих сообщениях и вводимых данных.

Чтобы изменить размер окна консоли, вы можете использовать mode -command:

 mode con cols=60 lines=10
  

Нет специальной команды для ожидания в течение нескольких секунд, но вы можете использовать ping -command, поскольку один запрос всегда занимает одну секунду. Поскольку нам не нужен вывод команды, мы отбрасываем его с помощью >nul . Пример кода, который ожидает 5 секунд:

 ping -n 5 localhost>nul
  

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

Комментарии:

1. waitfor — это таймер waitfor /t 5 anything , а choice — это также таймер, который пользователь может прервать.

Ответ №2:

 set /p ans=How Many Minutes to shutdown: 
set /a to=ans * 60
shutdown /s /t %to%
cls
choice /c y /m "Press Y to abort shutdown"
shutdown -a
  

Итак, введите для получения справки

 set /?
choice /?
shutdown /?
cls /?
  

Если вы хотите выполнить цикл, вы можете использовать if , goto и choice /t для реализации таймера.

 if /?
goto /?
choice /?
  

и для каких команд доступны (большинство, но не все)

 help
  

Комментарии:

1. Я не хочу показаться грубым или что-то в этом роде, но я действительно не понимаю код .. Вроде бы, вообще. У меня есть пример кода в моем вопросе, но я не знаю, как заставить его выполнять работу по завершению работы. Не могли бы вы помочь мне с этим, пожалуйста? 🙂

Ответ №3:

Сделал это для себя. Я уверен, что вам это понравится. Это немного неудобно, но это работает.

 @echo off

title "Shutdown Timer"

shutdown -a

:begin

set /p hours=Set hours:
set /a hours=%hours%*3600

set /p min=Set minutes:
set /a min=%min%*60

set /p sec=Set seconds:
set /a sec=%sec%

set /a timer=%hours% %min% %sec%

set /a currenthours=%hours%/3600
set /a currentmin=%min%/60
set /a currentsec=%sec%

echo Timer is set to %currenthours% hours, %currentmin% minutes and %currentsec% seconds

choice /c:SRA /m "S - Start Timer, R - Reset, A - Abort."
if %errorlevel% == 3 goto abort
if %errorlevel% == 2 goto reset
if %errorlevel% == 1 goto shutdownstart

:shutdownstart
echo Shutdown Timer started
shutdown /s /t %timer%

choice /c:RA /m "A - Abort Shutdown Timer, R - Reset Timer."
if %errorlevel% == 2 goto abort
if %errorlevel% == 1 goto reset

:reset
echo Resetting
shutdown -a
goto begin

:abort
echo Aborting
shutdown -a

exit
    
  

Также эта версия, если вам нравятся цифры.

 @echo off

title "Shutdown Timer 2"

shutdown -a

:begin

set /p hours=Set hours:
set /a hours=%hours%*3600

set /p min=Set minutes:
set /a min=%min%*60

set /p sec=Set seconds:
set /a sec=%sec%

set /a timer=%hours% %min% %sec%

set /a currenthours=%hours%/3600
set /a currentmin=%min%/60
set /a currentsec=%sec%

echo Timer is set to %currenthours% hours, %currentmin% minutes and %currentsec% seconds

echo 1. Start Timer
echo 2. Reset
echo 3. Abort
choice /c:123 /n /m "Choose option"
if %errorlevel% == 3 goto abort
if %errorlevel% == 2 goto reset
if %errorlevel% == 1 goto shutdownstart

:shutdownstart
echo Shutdown Timer started
shutdown /s /t %timer%

echo 1. Reset
echo 2. Abort
choice /c:12 /n /m "Choose option"
if %errorlevel% == 2 goto abort
if %errorlevel% == 1 goto reset

:reset
echo Resetting
shutdown -a
goto begin

:abort
echo Aborting
shutdown -a

exit