You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现电脑闲置30分钟自动重启的有效脚本及解决任务计划异常重启问题

求助:实现电脑闲置30分钟自动重启的有效脚本及解决任务计划异常重启问题

看起来你遇到了两个棘手的问题:原有BAT脚本失效,以及任务计划配置后出现无差别频繁重启。我来帮你一步步排查解决:

一、先分析你原有方案的问题

  1. 脚本层面:你用query user %username%获取空闲时间的方式有兼容性坑——这个命令的输出格式会随系统版本、会话类型(本地/远程)变化,遇到空闲时间小于1分钟会显示<1、用户活跃时显示None,这些情况都会导致脚本转换时间时出错,要么判断逻辑失效,要么误触发重启。
  2. 任务计划层面:你说电脑每隔5分钟就重启,大概率是错误设置了「重复任务间隔」,或者触发器选了「按时间间隔触发」而非「闲置触发」,导致不管你是否在使用电脑,任务都会定时执行。

二、给你两个可靠的脚本方案

方案1:改进版BAT脚本(兼容更多场景)

这个脚本会处理query user的各种输出格式,避免转换错误:

@echo off
setlocal enabledelayedexpansion

rem 初始化空闲时间为0
set "idleTime=0"

rem 获取用户会话的空闲时间,过滤有效数字格式的结果
for /f "tokens=1-4 delims=: " %%a in ('query user %username% 2^>nul') do (
    rem 检查第四列是否为数字(空闲时间单位:分钟)
    echo %%d | findstr /r "^[0-9]*$" >nul
    if !errorlevel! equ 0 (
        set "idleTime=%%d"
    )
)

rem 处理空闲时间小于1分钟的情况(query user会显示<1,转为0)
if "%idleTime%"=="<1" set "idleTime=0"

rem 转换为秒数(30分钟=1800秒)
set /a idleTimeSeconds=idleTime*60

rem 判断是否达到重启阈值
if %idleTimeSeconds% geq 1800 (
    echo 检测到电脑已闲置超过30分钟,正在强制重启...
    shutdown /r /t 0 /f
) else (
    echo 当前闲置时间:%idleTime%分钟,未达到重启条件。
)
endlocal

说明:加了/f参数强制关闭未响应程序,避免重启卡住;启用延迟扩展处理循环内的变量赋值问题。

方案2:PowerShell脚本(更稳定准确)

用Windows原生的WMI获取空闲时间,比BAT更可靠,几乎不会出错:

# 获取系统最后一次输入操作的时间
$lastInputTime = (Get-CimInstance Win32_OperatingSystem).LastInputTime
$currentTime = Get-Date
# 计算空闲秒数
$idleSeconds = ($currentTime - $lastInputTime).TotalSeconds

# 设置闲置阈值:30分钟=1800秒
$threshold = 1800

if ($idleSeconds -ge $threshold) {
    Write-Host "检测到电脑已闲置超过30分钟,即将强制重启..."
    Restart-Computer -Force
} else {
    $idleMinutes = [math]::Round($idleSeconds / 60)
    Write-Host "当前闲置时间:$idleMinutes分钟,未达到重启条件。"
}

三、正确配置任务计划(避免误触发)

这是解决频繁重启的核心!按照以下步骤配置:

  1. 打开「任务计划程序」,点击右侧「创建任务」(不要用「创建基本任务」,功能受限)
  2. 常规选项卡:填写任务名称(比如「闲置30分钟自动重启」),按需勾选「不管用户是否登录都要运行」
  3. 触发器选项卡:点击「新建」,选择「当计算机闲置时」
    • 在设置里勾选「当计算机闲置时间达到」,设置为30分钟
    • 绝对不要设置任何「按时间间隔重复触发」的选项!这是之前误重启的根源
  4. 操作选项卡:点击「新建」,选择「启动程序」
    • 如果用BAT脚本:「程序或脚本」选择你的BAT文件路径
    • 如果用PowerShell脚本:「程序或脚本」填powershell.exe,「添加参数」填-ExecutionPolicy Bypass -File "你的脚本路径.ps1"(注意路径要加引号)
  5. 条件选项卡:
    • 勾选「只有在计算机闲置时间达到以下值时才启动任务」,设置为30分钟(双重保险)
    • 取消勾选「唤醒计算机运行此任务」(如果不需要)
  6. 设置选项卡:
    • 取消勾选「如果任务失败,每隔X分钟重试」(避免脚本出错后反复执行)
    • 确保不要勾选「重复任务间隔」相关选项
  7. 点击「确定」完成配置

最后验证

配置完成后,你可以手动触发任务测试脚本是否正常工作,或者等待30分钟闲置状态,看是否会自动重启。如果还是有问题,检查任务计划的「历史记录」,看任务触发的原因,就能快速定位问题。

备注:内容来源于stack exchange,提问作者nohenag152

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:02:45