【问题标题】:Truncate SystemInfo / Boot Time output and set as a variable?截断 SystemInfo / Boot Time 输出并设置为变量?
【发布时间】:2019-09-27 12:09:14
【问题描述】:

我正在制作一个批处理脚本来检查本地联网 PC,并希望将每台 PC 的启动时间或正常运行时间设置为一个变量,以便我可以随意显示数据。

我使用这个命令打印到屏幕:

SystemInfo /s PC_NAME | find "Boot Time:"

并得到这个结果:

System Boot Time:          27/09/2019, 9:15:16 AM

但我只想将“27/09/2019, 9:15:16 AM”部分设置为变量。

谢谢

【问题讨论】:

标签: batch-file cmd truncate system-information


【解决方案1】:

请注意 systeminfo 已本地化。所以 "Boot Time" 仅适用于英文版的 Windows。

因此,最好将 WMIC 用于任何系统语言,如下面的代码:

@echo off
Title Last Boot Time
for /f %%a in ('WMIC OS GET lastbootuptime ^| find "."') DO set "DTS=%%a"
set "BOOTTIME=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%  %DTS:~8,2%:%DTS:~10,2%"
echo DTS      : %DTS%
echo BOOTTIME : %BOOTTIME%
pause

如果你喜欢这样的 vbscript:

Option Explicit
' Declare variables
Dim colItems, objItem, objWMIService,ws,Title
Dim strBoot, strBootDate, strBootDay, strBootHour, strBootMins
Dim strBootMonth, strBootTime, strBootYear, strComputer, strMsg, strQuery
Title = "La dernière heure de démarrage de votre ordinateur by Hackoo 2018"
Set ws = CreateObject( "WScript.Shell" )
strComputer = ws.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

If IsEmpty(strComputer) Then
    WScript.quit()
ElseIf  strComputer = "" Then
    strComputer = "."
End If

' Connect to specified computer
Set objWMIService = GetObject( "winmgmts://" & strComputer & "/root/cimv2" )
Set colItems = objWMIService.ExecQuery( "Select * from Win32_OperatingSystem", , 48 )
For Each objItem in colItems
    strBootYear  = Left( objItem.LastBootUpTime, 4 )
    strBootMonth = Mid( objItem.LastBootUpTime,  5, 2 )
    strBootDay   = Mid( objItem.LastBootUpTime,  7, 2 )
    strBootDate  = DateValue( strBootDay & "-" & strBootMonth & "-" & strBootYear )
    strBootHour  = Mid( objItem.LastBootUpTime,  9, 2 )
    strBootMins  = Mid( objItem.LastBootUpTime, 11, 2 )
    strBootTime  = strBootHour & ":" & strBootMins
    strBoot = strBootDate & ", " & strBootTime
    strMsg  = "La dernière heure de démarrage du PC : " & chr(34) & strComputer & chr(34) & " est : " &_
    vbCrlf & strBoot
Next

' Display results
MsgBox strMsg,vbInformation,Title

'Done
WScript.Quit(0)

【讨论】:

  • 根据this answer 来自 WMI 的LastBootupTime 是“不稳定的时间同步和休眠,在实践中无法使用。”我已经通过测试证实了这一点。从事件日志中检索启动事件对于本地化是稳健的(您只是在搜索事件代码),并且可以通过命令行使用evtviewer 来完成。
  • 我喜欢你的批处理脚本,但是我会在哪里输入本地联网 PC 的主机名?
【解决方案2】:

虽然我确信会有更有效的方法,但我想出来了:

@ECHO Off
SET PC_NAME=BillyPC
SET TEMP_FILE=C:\temp\temp.txt
SystemInfo /s %PC_NAME% | FIND "Boot Time:" > %TEMP_FILE%
SET /p BOOT_TIME=<%TEMP_FILE%
SET BOOT_TIME=%BOOT_TIME:~27%
ECHO %BOOT_TIME%
PAUSE

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 2022-01-24
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多