在批处理/日志文件中使用日期和时间






2.83/5 (6投票s)
在批处理/日志文件中使用日期和时间
引言
你是否尝试过在日志文件或批处理/命令文件中使用日期和时间?
在没有特殊软件的情况下,这并不容易。对我来说,这是一个问题,因为我每次发生事件时都需要一个单独的日志文件。我还将其用于创建备份计划。批处理命令的可能性太有限了,并且不同的语言操作系统会做出不同的反应,因此很难在多语言操作系统环境中部署这些批处理文件。
解决方案
解决方案非常简单。我运行一个 VB 脚本,在其中可以轻松获取日期时间和其他参数。这些值存储在环境变量中,可以在批处理文件中使用。
由于这些环境变量仅在特定的 shell 中有效,因此我们需要在 VB 脚本中调用批处理文件。
将以下代码复制到名为 RunNow.cmd 的文件中
'***********************************************
'
' RunNow.vbs
' (c) 2008 Computech.
' Initially Version 2003.
' 2/2/2008 Extra Functionality
' Written by Peter Verijke
'
'***********************************************
Dim dDay, dLDOM, dLDOY, dLFOW, dLFOM
Dim ArgObj
Dim BatchFile
Dim sCommand
Dim WshShell ' as object
Dim objEnv ' as collection
Dim sGetMyVar ' as string
' Get the Arguments object
Set ArgObj = WScript.Arguments
' Test to make sure there is at least one command line arg - the command
If ArgObj.Count < 1 Then
DisplayHelpMessage
WScript.Quit
End If
BatchFile = ArgObj(0)
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("PROCESS")
dNow = Now()
dLDOM = DateSerial(Year(dNow),Month(dNow) + 1,0)
dLDOY = DateSerial(Year(dNow) + 1, 1,0)
'Friday of this week
dLFOW = (dNow + (5 - Weekday(dNow, vbMonday)))
'Last Friday of Month
dLFOM = (dLDOM + (5 - Weekday(dLDOM, vbMonday)))
objEnv("Year") = Year(dNow)
objEnv("Month") = Right("0" & Month(dNow), 2)
objEnv("Day") = Right("0" & Day(dNow), 2)
objEnv("Hour") = Right("0" & Hour(dNow), 2)
objEnv("Minute") = Right("0" & Minute(dNow), 2)
objEnv("Second") = Right("0" & Second(dNow), 2)
'Day of Week
objEnv("DOW") = Weekday(dNow, vbMonday)
'Day of Week Name
objEnv("DOWN") = WeekDayName(WeekDay(dNow), 1)
'Week of Month
objEnv("WOM") = -Int(-((WEEKDAY(dNow-DAY(dNow)+1, 2) + DAY(dNow) -1) / 7))
'Last Day of Month
objEnv("LDOM") = Right("0" & Day(dLDOM), 2)
'Last Day of Year
objEnv("LDOY") = Right("0" & Day(dLDOY), 2)
'Last Friday of Week
objEnv("LFOW") = Right("0" & Day(dLFOW), 2)
'Last Friday of Month
objEnv("LFOM") = Right("0" & Day(dLFOM), 2)
sCommand = "%COMSPEC% /C "
WshShell.Run(sCommand + BatchFile)
WScript.Quit
'************************
'
' Display Help Message
'
'************************
Sub DisplayHelpMessage()
Dim sHelpMessage
sHelpMessage = "Usage:" & vbCrLf
sHelpMessage = sHelpMessage & Wscript.FullName & _
" RunNow <CommandFile|BatchFile>" & vbCrLf
sHelpMessage = sHelpMessage & _
"Optionally use environment variables in file: _
%Year% %Month% %Day% %Hour% %Minute% %Second%" & vbCrLf
sHelpMessage = sHelpMessage & _
"%DOW% %DOWN% %WOM% %LDOM% %LDOY% %LFOW% %LFOM%" & vbCrLf
WScript.Echo sHelpMessage
End Sub
用法
如源代码帮助消息所示,在你的批处理文件中使用环境变量 %Year% %Month% %Day% %Hour% %Minute%
或 %Second%
即可。例如,你可以创建一个名为 mydir.cmd 的命令文件,内容如下
dir > MyLog%Year%%Month%%Day%-%Hour%%Minute%%Second%.log
不要直接运行此文件,而是通过 VB 脚本运行
RunNow.vbs mydir.cmd
现在,还有一些额外的环境变量,例如月份的最后一天、月份的周数等。这些变量也可以用于命名或比较,以便在批处理文件中采取其他操作。我使用它来为一些数据创建每日、每周和每月备份。
就是这样。
希望这对你有所帮助。