【简单bat】写一个定时关机的批处理程序

感谢我那可爱的GPT助手对代码的优化工作。

@echo off
REM Author: YooooungLee TEL 155-****-9552

echo 欢迎使用自动关机计划设置脚本!by LiYang
echo.

:choose_action
set /p "action_choice=请选择要执行的操作(输入1设置定时关机任务,输入2删除定时关机任务):"

if "%action_choice%"=="1" (
    echo.
    echo -- 设置定时关机任务 --
    echo.
    REM 设置定时关机任务脚本
    goto set_shutdown_task
)

if "%action_choice%"=="2" (
    echo.
    echo -- 删除定时关机任务,如提示“错误:拒绝访问”,请退出后,以管理员权限重新运行程序 --
    echo.
    REM 删除定时关机任务脚本
    goto delete_shutdown_task
)

echo 错误:无效的选项,请输入1或2来选择操作。
echo.
pause
goto choose_action

:set_shutdown_task
:: 之前完成的设置定时关机任务的脚本
setlocal enabledelayedexpansion

:input_time
set /p shutdown_time=请输入每日关机时间(格式为HH:mm,例如 20:00 表示晚上8点):

rem 检查输入的时间格式是否正确
for /f "tokens=1,2 delims=:" %%a in ("%shutdown_time%") do (
    set "hour=%%a"
    set "minute=%%b"
)

rem 检查小时和分钟是否都是数字
echo %hour% | findstr /r "[0-9]" >nul
if %errorlevel% neq 0 (
    echo 错误:输入的时间格式不正确,请重新输入。
    goto input_time
)
echo %minute% | findstr /r "[0-9]" >nul
if %errorlevel% neq 0 (
    echo 错误:输入的时间格式不正确,请重新输入。
    goto input_time
)

rem 检查小时和分钟是否在合法范围内(小时:00到23,分钟:00到59)
if %hour% lss 0 (
    echo 错误:输入的小时值不能小于0,请重新输入。
    goto input_time
)
if %hour% gtr 23 (
    echo 错误:输入的小时值不能大于23,请重新输入。
    goto input_time
)
if %minute% lss 0 (
    echo 错误:输入的分钟值不能小于0,请重新输入。
    goto input_time
)
if %minute% gtr 59 (
    echo 错误:输入的分钟值不能大于59,请重新输入。
    goto input_time
)

echo 正在设置每日 %shutdown_time% 自动关机...
echo 请勿关闭此窗口,否则设置将失效.

:: 删除之前设置的同名自动关机任务(如果存在)
schtasks /delete /tn "每日自动关机" /f >nul 2>&1

:: 创建新的自动关机任务
schtasks /create /tn "每日自动关机" /tr "shutdown /s /f /t 0" /sc daily /st %shutdown_time%

echo 每日 %shutdown_time% 自动关机任务设置完毕。
echo 可以双击此脚本再次设置计划任务或手动删除计划任务。
pause
goto :EOF

:delete_shutdown_task
:: 删除定时关机任务的脚本
echo 正在删除之前设置的每日自动关机任务...
schtasks /delete /tn "每日自动关机" /f
echo 已删除之前设置的每日自动关机任务。
pause
goto :EOF

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当然,你可以使用批处理bat)文件来实现定时开关的功能。以下是一个示例的批处理脚本,可以在指定的时间自动执行开和关命令: ```bat @echo off REM 设置开时间 set boot_hour=8 set boot_minute=0 REM 设置关时间 set shutdown_hour=18 set shutdown_minute=0 :LOOP REM 获取当前时间 for /F "tokens=1-3 delims=:." %%a in ("%TIME%") do ( set /A current_hour = %%a set /A current_minute = %%b ) REM 检查当前时间是否达到开时间,如果是则执行开命令 if %current_hour% equ %boot_hour% if %current_minute% equ %boot_minute% ( echo 开命令 REM 在此处输入开命令,例如:shutdown /s /f /t 0 ) REM 检查当前时间是否达到关时间,如果是则执行关命令 if %current_hour% equ %shutdown_hour% if %current_minute% equ %shutdown_minute% ( echo 关命令 REM 在此处输入关命令,例如:shutdown /s /f /t 0 ) REM 每隔一分钟检查一次时间 timeout 60 >nul goto :LOOP ``` 在这个示例中,我们首先设置了开时间和关时间。然后使用一个无限循环,在每次循环中获取当前时间,并与设置的时间进行比较。如果当前时间达到了开或关时间,则执行相应的命令。 你需要将示例中的 "开命令" 和 "关命令" 部分替换为实际的开和关命令。例如,使用 `shutdown /s /f /t 0` 命令来执行关操作。 保存上述代码为一个批处理文件(例如:`auto_shutdown.bat`),然后双击运行它即可实现定时开关的功能。请注意,批处理文件将在后台持续运行,直到手动停止或计算关闭。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值