问题描述
@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)
我尝试了几件事,但失败了。有什么办法可以批量进行此操作? 谢谢。
解决方法
由于您已经在使用wsh进行日期转换,因此也可以使用它来检索wmi信息。
这里是单个混合batch-file,它可以为您完成此操作,而无需编写vbs文件,运行它,然后将其删除:
<!-- :
@"%__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>
由于您没有尝试自己计算天数,因此我不会解释上述任何内容,对其进行修改或在您决定修改提交的问题后对其进行调整。