#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