65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.83/5 (6投票s)

2003年9月30日

CPOL

1分钟阅读

viewsIcon

178732

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

引言

你是否尝试过在日志文件或批处理/命令文件中使用日期和时间?
在没有特殊软件的情况下,这并不容易。对我来说,这是一个问题,因为我每次发生事件时都需要一个单独的日志文件。我还将其用于创建备份计划。批处理命令的可能性太有限了,并且不同的语言操作系统会做出不同的反应,因此很难在多语言操作系统环境中部署这些批处理文件。

解决方案

解决方案非常简单。我运行一个 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 

现在,还有一些额外的环境变量,例如月份的最后一天、月份的周数等。这些变量也可以用于命名或比较,以便在批处理文件中采取其他操作。我使用它来为一些数据创建每日、每周和每月备份。

就是这样。

希望这对你有所帮助。

© . All rights reserved.