用脚本自动关机并提醒怎么写

wen 实用脚本 2

从入门到精通的完整指南(附代码)

目录导读

  1. 为什么需要自动关机脚本?——场景与痛点分析
  2. 前置准备:Windows/macOS/Linux 环境差异说明
  3. 核心脚本写法详解(附可复制代码)
    • 1 Windows(批处理 + PowerShell)
    • 2 macOS / Linux(Bash + AppleScript)
  4. 如何实现"关机前弹窗提醒"?——3种交互方案
  5. 进阶技巧:定时任务 + 日志记录 + 取消机制
  6. 常见问题问答(FAQ)
  7. 安全提示与最佳实践

为什么需要自动关机脚本?——场景与痛点分析

你是否遇到过这些情况:下载大文件到深夜、视频渲染需要几个小时、系统更新后忘记关机、或者想给孩子设置电脑使用时间限制?手动等待关机不仅浪费时间,还可能因疏忽导致设备整夜运行,浪费电力并加速硬件老化。

用脚本自动关机并提醒怎么写

脚本自动关机的核心价值在于:将"人工盯着"变为"系统自动判断",你可以设定"当备份完成后30分钟自动关机",或者"每天23:50提醒并关机",更智能的脚本还能在关机前弹出对话框,让你选择"立即关机"或"取消",避免误操作。

注意:本文所有脚本均需以管理员/root权限运行,否则系统会拒绝执行关机命令。


前置准备:Windows/macOS/Linux 环境差异说明

系统 关机命令 提醒方式 调度工具
Windows 10/11 shutdown /s /t 60 msg * 或 PowerShell 弹窗 任务计划程序
macOS sudo shutdown -h +1 osascript -e 'display dialog' crontab / launchd
Linux (Ubuntu等) sudo shutdown -h +1 notify-sendzenity crontab / systemd-timer

关键点:Windows 的 shutdown /s 表示关机,/t 是延迟秒数;Linux/macOS 的 shutdown -h 后接 +分钟数+1 表示1分钟后)。


核心脚本写法详解(附可复制代码)

1 Windows(批处理 + PowerShell)

场景:2小时后自动关机,并在最后5分钟弹窗提醒。

批处理(.bat)文件

@echo off
echo 系统将在 2 小时后自动关机。
echo 如需取消,请运行 shutdown /a
shutdown /s /t 7200

增强版(带提醒):保存为 auto_shutdown.bat

@echo off
:: 设定关机延迟时间(秒):7200 = 2小时
set /a DELAY=7200
:: 提前5分钟(300秒)提醒
set /a REMIND=300
echo [信息] 将在 %DELAY% 秒后关机,提前 %REMIND% 秒弹窗提醒。
shutdown /s /t %DELAY%
:: 使用PowerShell在提醒时间弹出对话框
powershell -Command "Start-Sleep -Seconds %DELAY%-%REMIND%; [System.Windows.Forms.MessageBox]::Show('注意:系统将在5分钟后关机!如需取消,请运行 shutdown /a','关机提醒')"

提示:上述PowerShell命令需要 Add-Type -AssemblyName System.Windows.Forms,可在脚本开头加上,如果你觉得复杂,直接用 msg * 系统5分钟后关机 更简单(但无图形界面)。


2 macOS / Linux(Bash + AppleScript)

Linux(使用 notify-send 弹窗)

#!/bin/bash
# 设定120分钟后关机
DELAY_MIN=120
REMIND_MIN=5
echo "系统将在 ${DELAY_MIN} 分钟后关闭"
shutdown -h +${DELAY_MIN}
# 在提前5分钟时提醒(使用at命令或后台循环)
(sleep $(( (DELAY_MIN - REMIND_MIN) * 60 )) && notify-send "关机提醒" "5分钟后关机,按 Ctrl+C 可取消") &

macOS(使用 AppleScript 对话框)

#!/bin/bash
DELAY_MIN=120
REMIND_MIN=5
echo "将在 ${DELAY_MIN} 分钟后关机"
sudo shutdown -h +${DELAY_MIN} &
# 后台等待并弹窗
sleep $(( (DELAY_MIN - REMIND_MIN) * 60 ))
osascript -e 'display dialog "5分钟后关机" buttons {"取消","确定"} default button "确定"'

如何实现"关机前弹窗提醒"?——3种交互方案

方案A:Windows 原生 msg 命令(最简单)

msg * /TIME:0 "系统将在1分钟后关机,请保存工作!"
shutdown /s /t 60

优点:无需额外软件;缺点:仅局域网用户可见,且样式古板。

方案B:PowerShell 图形弹窗(最推荐)

Add-Type -AssemblyName System.Windows.Forms
$result = [System.Windows.Forms.MessageBox]::Show('是否立即关机?','确认关机',[System.Windows.Forms.MessageBoxButtons]::YesNo)
if ($result -eq 'Yes') { shutdown /s /t 0 } else { shutdown /a }

你可以把这段PowerShell嵌入批处理中,实现倒计时弹窗选择

方案C:Python 脚本(跨平台,灵活)

import os, time
import tkinter as tk
from tkinter import messagebox
# 设定30分钟后期关机
delay_sec = 1800
root = tk.Tk()
root.withdraw()
if messagebox.askokcancel("提醒", f"系统将在{delay_sec//60}分钟后关机\n是否取消?"):
    os.system("shutdown /a")  # Windows
else:
    os.system("shutdown /s /t 0")

若你是编程新手,直接复制方案A即可;如果需要美观界面,用方案B。


进阶技巧:定时任务 + 日志记录 + 取消机制

(1)日志记录:在脚本中加入 echo %date% %time% >> C:\log\shutdown.log,可追踪每次关机操作。

(2)取消机制:随时运行 shutdown /a (Windows)或 sudo shutdown -c (Linux),建议提醒弹窗中明确告知用户。

(3)与定时任务结合(每天23:30执行):

  • Windows:任务计划程序 -> 创建基本任务 -> 触发器“每天” -> 操作“启动程序”选择你的bat文件。
  • Linuxcrontab -e 添加 30 23 * * * /path/to/script.sh

(4)防止误关:在脚本开头检查是否有活动进程(如 tasklist 中有渲染软件),若有则延迟关机。


常见问题问答(FAQ)

Q1:脚本运行后,如何取消已经计划的关机? A:Windows 输入 shutdown /a;Linux/macOS 输入 sudo shutdown -c,若提醒弹窗中有“取消”按钮,点击即可。

Q2:为什么我的 shutdown 命令提示“拒绝访问”? A:请用管理员身份运行脚本(右键“以管理员身份运行”),或 sudo 加前缀。

Q3:能否让提醒弹窗一直显示,直到用户点击? A:可以,上述PowerShell和Python方案均会阻塞脚本执行,只有当用户点击“确定”或“取消”后才会继续,因此默认就会显示到用户操作。

Q4:多系统环境下,脚本能否通用? A:不能,务必按操作系统区分,但可以用 Python + platform 模块写跨系统脚本,但较复杂,不推荐初学者。

Q5:有没有图形化界面工具替代脚本? A:Windows 可用“关机助手”等小工具,但脚本更轻量、可控性更强。


安全提示与最佳实践

  1. 测试先行:先在虚拟机或非关键电脑上测试,切勿在工作电脑直接运行未测试脚本。
  2. 设置足够长的延迟(建议≥5分钟),并确保提醒清晰,防止数据丢失。
  3. 使用绝对路径:在定时任务中,脚本内部涉及的文件路径最好用绝对路径,避免相对路径错误。
  4. 权限最小化:Linux下脚本若需要root权限,建议仅将关机命令用sudo,其余部分普通权限即可。
  5. 备份脚本:将脚本放在用户目录或配置管理中,避免误删。

最后的话:自动关机脚本的本质是用规则的确定性对抗记忆的不可靠性,掌握上述方法后,你还可以扩展出“按CPU使用率降低后关机”“下载完成后关机”等高级玩法,让电脑成为懂你的智能管家。

(全文约1800字)

抱歉,评论功能暂时关闭!