我如何批量创建和组合“ InstallDate”输出和“ xxx Days Ago”?

问题描述

下面提到的批处理文件显示InstallDate(已转换):

@echo off
for /f "delims=" %%A in ('WMIC OS GET InstallDate /format:value') do (
    @for /f "tokens=2 delims==" %%B in ("%%A") do (
        Call :ConvertDate %%B
    )>"%temp%\%~n0.txt"
)
for /f "delims=" %%D in ('Type "%temp%\%~n0.txt"') do ( set InstallDate=%%D )
echo Install Date: %InstallDate%
pause
::**********************************************************************
Rem Function for Converting WMI Dates to a Standard Date-Time Format
:ConvertDate <Date>
(
    echo WScript.echo WMIDateStringToDate("%~1"^)
    echo Function WMIDateStringToDate(Mydate^)
    echo  WMIDateStringToDate = CDate(Mid(Mydate,5,2^) ^& "/" ^& _
    echo  Mid(Mydate,7,2^) ^& "/" ^& Left(Mydate,4^) _
    echo  ^& " " ^& Mid (Mydate,9,2^) ^& ":" ^& _
    echo  Mid(Mydate,11,2^) ^& ":" ^& Mid(Mydate,13,2^)^)
    echo End Function
)>"%temp%\%~n0.vbs"
cscript /nologo "%temp%\%~n0.vbs" "%~1"
Del "%temp%\%~n0.vbs"
exit /b

输出

Install Date: 24/05/2020 12:54:28

现在,为此,我正在尝试创建和组合Desire Output,如:

Install Date: 24/05/2020 12:54:28 (114 Days Ago)

我尝试了几件事,但失败了。有什么办法可以批量进行此操作? 谢谢。

解决方法

由于您已经在使用进行日期转换,因此也可以使用它来检索信息。

这里是单个混合,它可以为您完成此操作,而无需编写文件,运行它,然后将其删除:

<!-- :
@"%__APPDIR__%cscript.exe" //NoLogo "%~f0?.wsf"
@Pause & GoTo :EOF
-->
<Job><Script Language="VBScript">
    On Error Resume Next
    Set objWMIService = GetObject("winmgmts://./root/cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",48)
    For Each objItem in colItems
        dtmInstalled   = ParseDat(objItem.InstallDate)
        numInstalled   = DateDiff("n",dtmInstalled,ParseDat(objItem.LocalDateTime))
        numInstDays    = (numInstalled \ 60) \ 24
        strMessage     = "Install Date: " & dtmInstalled
        If numInstDays     = 0 Then
            strMessage     = strMessage & " (Today)"
        ElseIf numInstDays > 1 Then
            strMessage     = strMessage & " (" & numInstDays & " Days Ago)"
        Else
            strMessage     = strMessage & " (" & numInstDays & " Day Ago)"
        End If
    Next
    WScript.Echo strMessage
    WScript.Quit

    Function ParseDat(ByVal strDate)
        strYear  = Left(strDate,4)
        strMonth = Mid(strDate,5,2)
        strDay   = Mid(strDate,7,2)
        strDat   = strDay & "/" & strMonth & "/" & strYear
        strHour  = Mid(strDate,9,2) - strTimeShift
        strMins  = Mid(strDate,11,2)
        strSecs  = Mid(strDate,13,2)
        strTime  = strHour & ":" & strMins & ":" & strSecs
        ParseDat = strDat & " " & strTime
    End Function
    </Script></Job>

由于您没有尝试自己计算天数,因此我不会解释上述任何内容,对其进行修改或在您决定修改提交的问题后对其进行调整。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...