在指定时间关闭电脑

在指定时间关闭电脑

我有一个软件(calibre ebook manager),可以在早上 6 点获取新闻。我想做以下事情:

  1. 如果尚未开启,则在 5:50 唤醒计算机。(可在 BIOS 中轻松完成)
  2. 调度程序于 ​​5:55 打开 calibre(已完成)
  3. Calibre 在启动时获取新闻。

上述步骤很容易完成,但也存在一些问题。我想在电脑于 5:50 自动启动时关闭电脑。如果出于某种原因,电脑已经打开,我不想关闭它。

那应该怎么做呢?

答案1

这里是自动热键执行此操作的脚本。确保在启动时运行此脚本。(在启动文件夹中添加快捷方式)

;
; AutoHotkey Version: 1.x
; Language:       English
; Platform:       Win9x/NT
; Author:         AEonAX
;
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
if (A_Hour=5 and A_Min>55 and A_Min<59) ;Check if script starting time between 05:55 and 05:59 (24Hr clock)
{
Sleep,1000*60*5     ;Waits 5 Minutes
msgbox,4,,Will Shutdown in 60 seconds. Do you want to Stop the Shutdown.,60 ;Shows a msgbox for 60 seconds, If no response then shutsdown
ifmsgbox,Yes
    MsgBox Shutdown Cancelled
else
    Shutdown,1
}

答案2

由于条件是仅当计算机在 5:50 自动启动时才重置,我猜一种方法是依赖启动时间。您可以调整分钟计时器来检测当 BIOS 在 5:50 启动计算机时系统看到的启动时间是多少。但这是一个细节。

对于关机和检测启动时间,您可以使用以下 powershell 脚本:

# GETTING BOOT TIME
$last_boot_date_time = Get-WmiObject win32_operatingsystem | select @{LABEL='LastBootUpTime';EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}

# SELECTING HOUR:MINUTES:SECONDS PART OF THE DATE
$last_boot_time_only = $last_boot_date_time | foreach { ([String]$_).split(" ")[1] }

# CHECKING IF BOOT TIME EQUALS 05:50
# IF SO - INITIATE SHUTDOWN
if ( $last_boot_time_only.split(":")[0] -eq "05" -and $last_boot_time_only.split(":")[1] -eq "50")
{ 
    Write-host "Shutting down in 10 seconds."; 
    shutdown -s -f -t 10
}

假设您使用的是 Windows 的 powershell 版本 1 或 2。如果您使用的是更高版本的 powershell,您可能需要将获取启动时间的命令替换为Get-CimInstance -ClassName win32_operatingsystem | select lastbootuptime

答案3

尝试下面的批处理脚本,它依赖于系统正常运行时间。在您认为合适时使用调度程序运行此脚本

@echo off
setlocal enabledelayedexpansion

for /f "tokens=2 delims=," %%a in ('systeminfo ^| findstr Boot ^| findstr System') do (
  set output=%%a
  set /a hrs=!output:~1,1!
  set mins=!output:~3,2!
 ::echo !output!
 ::echo !hrs! 
 ::echo !mins!
if !hrs! == 5 (
    if !mins! == 50 (
        shutdown -s -f -t 100
    )
) 

)

嗯,这就是想法,根据需要进行调整

解释。

  1. 提取计算机开启的时间,

systeminfo ^| findstr 启动 ^| findstr 系统

systeminfo 包含大量信息,因此我们仅过滤需要查找的参数。例如,

C:\Users>systeminfo | findstr Boot |findstr System

系统启动时间:2014 年 12 月 4 日,上午 7:20:37

  1. 仅选择以逗号分隔的时间字段

对于/f“tokens=2 delims=,”%%a在('systeminfo ^| findstr Boot ^| findstr System')中执行(设置输出=%%a

并且在整个字符串中仅选择第一个字符( 1 个空格)、第三和第四个字符( 2 个空格)

设置/a 小时=!输出:~1,1!设置分钟=!输出:~3,2!

仅提供小时和分钟

  1. 如果时间匹配则 IF 函数关闭。

如果 !小时! == 5 (

  if !mins! == 50 (

      shutdown -s -f -t 100

PS: 下面是注释,如果代码有错误,

::回显!输出!

::回声!小时!

::回声!分钟!

答案4

尝试 Windows 版 nncron http://www.nncron.ru/help/help.htm 英文版

相关内容