如何在几秒钟内获得 Windows 正常运行时间?

如何在几秒钟内获得 Windows 正常运行时间?

以下命令可以以格式化的日期和时间形式获取 Windows 的正常运行时间:

>wmic path Win32_OperatingSystem get LastBootUpTime | find "."
20201031212925.500000-180

>systeminfo | find "System Boot Time"
System Boot Time:          10/31/2020, 9:29:25 PM

>net statistics workstation | find ":"
Statistics since 10/31/2020 9:29:36 PM

>wmic os get lastbootuptime | find "."
20201031212925.500000-180

鉴于我想避免:

  • 依赖 Windows 10 中未默认安装的命令
  • 需要提升权限才能运行
  • 使用 Powershell
  • 使用 VBScript
  • 解析格式化的日期和时间字符串

如何在批处理文件中使用以秒为单位的 Windows 正常运行时间?

答案1

首先,我明白为什么这里的每个人都在推崇 powershell更好但如果不安装或更新某些东西它就无法在其他计算机上运行,​​那么它就无济于事。

不要使用 Windows Scripting Host,而是使用 Windows 自带的 WMIC 工具。WMIC 工具的问题是它输出的文本充满了 unicode 和 CR/LF 组合,因此很难解析。为了解决这个问题,我们将通过 findstr 实用程序运行 WMIC 返回的任何内容,并将其从“糟糕”转换为“糟糕”。

@echo off

:: Make sure our variable is empty
Set SystemUptime=
Echo SystemUptime="%SystemUptime%"

(for /F "tokens=1,* delims==" %%v in (
    'wmic path Win32_PerfFormattedData_PerfOS_System get SystemUptime /format:list ^| findstr "[0-9]"'
) do (
    Set "%%v=%%w"
))

Echo SystemUptime="%SystemUptime%"

我希望这就是你所要求的。

记住,WMIC 工具已被弃用,最终将会消失希望到那时,每个人都会有一个适合自己的 powershell 版本。

答案2

现在这可能是这个问题中最糟糕的答案,但无论如何答案是:

#include <stdio.h>
#include <time.h>
int main() {
 printf("%lu", time(0));
 return 0;
}

是一个 C 程序,它将输出自上一个纪元以来的时间(以秒为单位)。有关它的维基百科页面:https://en.wikipedia.org/wiki/C_date_and_time_functions

本节具体如下:

将系统的当前时间作为 time_t 值返回,单位为秒数(通常是自某个纪元以来的时间,通常是 Unix 纪元)。纪元的值取决于操作系统;通常使用 1900 和 1970。请参阅 RFC 868。

但是,您真的想要自上一个纪元以来的秒数吗?其次,如果您现在使用的是批处理脚本:为什么不考虑一种更独立于平台的方法呢?或者将我刚刚发布的“那种”解决方案与批处理脚本混合使用?只需静态编译 C 源代码即可。使用 GNU GCC 时,您可以通过在命令行或编译标志中添加 -static 来执行此操作。

答案3

  • 编辑:除非你愿意下载第三方的,否则我看不出有解决这个问题的明确方法Uptime公用事业。

微软在 1999 年发布了一个,但后来弃用了它。如果你在 Google 上搜索一下,你仍然可以找到它。(提示:https://zedt.eu/tech/windows/microsofts-uptime-utility/

Microsoft Uptime 实用程序运行良好。

使用该实用程序和这个小脚本,您可以以秒为单位显示本地机器的系统正常运行时间:

@ECHO 关闭

设置本地

中立证券

如果存在 .\uptime.txt DEL /A /F .\uptime.txt

.\uptime.exe > .\uptime.txt

FOR /F "TOKENS=6,8,10,12" %%G IN ( .\uptime.txt ) DO (

                            设置/A 天=%%G`

                            设置/A 小时=%%H`

                            SET /A 分钟=%%I

                            SET /A 秒=%%J


设置/A TotalUptimeInSeconds=(%天% * 86400) + (%小时% * 3600) + (%分钟% * 60) + %秒%

ECHO 系统正常运行时间为 %TotalUptimeInSeconds% 秒。

端到端

退出/b

相关内容