![在指定时间关闭电脑](https://linux22.com/image/1432834/%E5%9C%A8%E6%8C%87%E5%AE%9A%E6%97%B6%E9%97%B4%E5%85%B3%E9%97%AD%E7%94%B5%E8%84%91.png)
我有一个软件(calibre ebook manager),可以在早上 6 点获取新闻。我想做以下事情:
- 如果尚未开启,则在 5:50 唤醒计算机。(可在 BIOS 中轻松完成)
- 调度程序于 5:55 打开 calibre(已完成)
- 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
)
)
)
嗯,这就是想法,根据需要进行调整
解释。
- 提取计算机开启的时间,
systeminfo ^| findstr 启动 ^| findstr 系统
systeminfo 包含大量信息,因此我们仅过滤需要查找的参数。例如,
C:\Users>systeminfo | findstr Boot |findstr System
系统启动时间:2014 年 12 月 4 日,上午 7:20:37
- 仅选择以逗号分隔的时间字段
对于/f“tokens=2 delims=,”%%a在('systeminfo ^| findstr Boot ^| findstr System')中执行(设置输出=%%a
并且在整个字符串中仅选择第一个字符( 1 个空格)、第三和第四个字符( 2 个空格)
设置/a 小时=!输出:~1,1!设置分钟=!输出:~3,2!
仅提供小时和分钟
- 如果时间匹配则 IF 函数关闭。
如果 !小时! == 5 (
if !mins! == 50 ( shutdown -s -f -t 100
PS: 下面是注释,如果代码有错误,
::回显!输出!
::回声!小时!
::回声!分钟!
答案4
尝试 Windows 版 nncron http://www.nncron.ru/help/help.htm 英文版