VBScript 移动并新建了具有相同日期时间的文件
VBScript moved and new created file with same date-time
我正在使用以下代码轮转日志文件。如果 Log.txt 文件不同于当前日期时间(基于文件 属性 .DateCreated),则使用 .DateCreated 值移动文件以重命名它,然后使用新的 Log.txt文件已创建,但新文件创建日期值与移动(存档)文件相同。
如果脚本在几秒钟后再次 运行,则无法移动 Log.txt 文件,因为存档版本已经存在。
Option Explicit
Dim objFS: Set objFS = CreateObject("Scripting.FileSystemObject")
Dim strLogPath: strLogPath = "C:\Logs"
Dim strLogFQFN: strLogFQFN = objFS.BuildPath(strLogPath, "Log.txt")
If objFS.FileExists(strLogFQFN) <> True Then
WScript.Quit
End If
'As file exists, validate if archive is needed
Dim objFile: Set objFile = objFS.GetFile(strLogFQFN)
Dim dtmLog: dtmLog = objFile.DateCreated'DateValue(objFile.DateCreated)
Dim dtmNow: dtmNow = Now 'Date
Set objFile = Nothing
WScript.Echo dtmLog
WScript.Echo dtmNow
If (dtmLog <> dtmNow) Then
Dim tsDate: tsDate = DatePart("yyyy", dtmLog) & "-" & Right("0" & DatePart("m", dtmLog), 2) & "-" & Right("0" & DatePart("d", dtmLog), 2)
Dim tsTime : tsTime = Right("0" & Hour(dtmLog), 2) & Right("0" & Minute(dtmLog), 2) & Right("0" & Second(dtmLog), 2)
Call objFS.MoveFile(strLogFQFN, objFS.BuildPath(strLogPath, tsDate & "T" & tsTime & ".txt"))
Call objFS.CreateTextFile(strLogFQFN, False)
End If
1st run - Original file Log.txt moved to 2022-03-11T014931.txt and new Log.txt created
1st and 2nd run date-time values and error
谢谢
根据 LesFerch 的评论,我测试了添加 16 秒的延迟以克服默认的隧道缓存时间,并解决了使用 C 驱动器的问题。
Call objFS.MoveFile(strLogFQFN, objFS.BuildPath(strLogPath, tsDate & "T" & tsTime & ".txt"))
WScript.Sleep 16000
Call objFS.CreateTextFile(strLogFQFN, False)
我正在使用以下代码轮转日志文件。如果 Log.txt 文件不同于当前日期时间(基于文件 属性 .DateCreated),则使用 .DateCreated 值移动文件以重命名它,然后使用新的 Log.txt文件已创建,但新文件创建日期值与移动(存档)文件相同。
如果脚本在几秒钟后再次 运行,则无法移动 Log.txt 文件,因为存档版本已经存在。
Option Explicit
Dim objFS: Set objFS = CreateObject("Scripting.FileSystemObject")
Dim strLogPath: strLogPath = "C:\Logs"
Dim strLogFQFN: strLogFQFN = objFS.BuildPath(strLogPath, "Log.txt")
If objFS.FileExists(strLogFQFN) <> True Then
WScript.Quit
End If
'As file exists, validate if archive is needed
Dim objFile: Set objFile = objFS.GetFile(strLogFQFN)
Dim dtmLog: dtmLog = objFile.DateCreated'DateValue(objFile.DateCreated)
Dim dtmNow: dtmNow = Now 'Date
Set objFile = Nothing
WScript.Echo dtmLog
WScript.Echo dtmNow
If (dtmLog <> dtmNow) Then
Dim tsDate: tsDate = DatePart("yyyy", dtmLog) & "-" & Right("0" & DatePart("m", dtmLog), 2) & "-" & Right("0" & DatePart("d", dtmLog), 2)
Dim tsTime : tsTime = Right("0" & Hour(dtmLog), 2) & Right("0" & Minute(dtmLog), 2) & Right("0" & Second(dtmLog), 2)
Call objFS.MoveFile(strLogFQFN, objFS.BuildPath(strLogPath, tsDate & "T" & tsTime & ".txt"))
Call objFS.CreateTextFile(strLogFQFN, False)
End If
1st run - Original file Log.txt moved to 2022-03-11T014931.txt and new Log.txt created
1st and 2nd run date-time values and error
谢谢
根据 LesFerch 的评论,我测试了添加 16 秒的延迟以克服默认的隧道缓存时间,并解决了使用 C 驱动器的问题。
Call objFS.MoveFile(strLogFQFN, objFS.BuildPath(strLogPath, tsDate & "T" & tsTime & ".txt"))
WScript.Sleep 16000
Call objFS.CreateTextFile(strLogFQFN, False)