Vbscript从C驱动器查找180天以前的日志文件
我已经写了一个vbscript来从C驱动器中查找180天以前的日志文件。现在,下面脚本中的问题是,我能够从C驱动器获得所有日志文件的详细信息,但不是180天以前。谁能帮我修改一下脚本吗Vbscript从C驱动器查找180天以前的日志文件,vbscript,Vbscript,我已经写了一个vbscript来从C驱动器中查找180天以前的日志文件。现在,下面脚本中的问题是,我能够从C驱动器获得所有日志文件的详细信息,但不是180天以前。谁能帮我修改一下脚本吗 strComputer = "." Dim objFile,iDaysOld,item,objFSO,dateTime,Filesize,LargeFile,strCheckDate Dim FileName,FileName1,Logs,GetFile,file,filemodified,OldFile,Lar
strComputer = "."
Dim objFile,iDaysOld,item,objFSO,dateTime,Filesize,LargeFile,strCheckDate
Dim FileName,FileName1,Logs,GetFile,file,filemodified,OldFile,LargeFile1
iDaysOld = 180
Set dateTime = CreateObject("WbemScripting.SWbemDateTime")
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set files = wmi.ExecQuery("Select * from CIM_DataFile Where Extension='log' AND Drive='C:'")
For Each file in files
If LCase(Right(Cstr(file.Name), 3)) = "log" Then
FileName1 = Trim(file.Name)
FileName = (file.Name & "," & FileName)
Filesize= (file.FileSize)
filemodified = file.lastModified
filemodified = left (filemodified, 8 )
filemodified = Month(Date) & "_" & Day(Date) & "_" & Year(Date)
strCheckDate = strDateCreated
strCheckDate = strDateAccessed
strCheckDate = strDateModified
If strCheckDate < (Date() - iDaysOld) Then
OldFile = (file.Name & "," & OldFile)
End If
If Filesize >= 104857600 Then
LargeFile = (file.Name & "," & LargeFile)
' oFile.Delete(True)
End If
End If
Next
wscript.echo "tr_Oldlogfiles=" &OldFile
wscript.echo "tr_Largelogfiles=" &LargeFile
strComputer=“”
Dim objFile、iDaysOld、项、objFSO、日期时间、文件大小、大文件、strCheckDate
Dim文件名、文件名1、日志、GetFile、file、filemodified、OldFile、LargeFile1
iDaysOld=180
Set dateTime=CreateObject(“WbemScripting.SWbemDateTime”)
设置wmi=GetObject(“winmgmts:\\.\root\cimv2”)
Set files=wmi.ExecQuery(“从CIM_数据文件中选择*扩展名='log'和驱动器='C:'”)
对于文件中的每个文件
如果LCase(右(Cstr(file.Name),3))=“log”,则
FileName1=Trim(file.Name)
FileName=(file.Name&“,”和FileName)
Filesize=(file.Filesize)
filemodified=file.lastModified
filemodified=left(filemodified,8)
文件修改=月(日)&“日(日)&”年(日)
strCheckDate=strDateCreated
strCheckDate=strDateAccessed
strCheckDate=strDateModified
如果strCheckDate<(Date()-iDaysOld),则
OldFile=(file.Name&“,”&OldFile)
如果结束
如果文件大小>=104857600,则
LargeFile=(file.Name&“,”&LargeFile)
'oFile.Delete(True)
如果结束
如果结束
下一个
wscript.echo“tr_Oldlogfiles=“&OldFile
wscript.echo“tr_Largelogfiles=“&LargeFile
文章坚持认为,如果一个表达式是数字,另一个是字符串,那么数字表达式小于字符串表达式。另一方面,file.FileSize
和file.lastModified
都是字符串,尽管表面上:
属性表示文件的大小(以字节为单位,FileSize
)和UIint64
属性是一个日期时间值,指示上次修改文件的时间(请参阅)LastModified
stresult
variable
Option Explicit
'On Error Resume Next
On Error GoTo 0
Dim strResult '' debug output variable
Dim iFileAge, dFileDate, iByLarge, booIsOld, booIsBig, iiAll, iiBig, iiOld, iiLaa
Dim strComputer, wmi, files, objSWbemDateTime
iiAll = 0: iiBig = 0: iiOld = 0: iiLaa = 0: strComputer = "."
Dim objFile,iDaysOld,item,objFSO,dateTime,Filesize,LargeFile,strCheckDate
Dim FileName,FileName1,Logs,GetFile,file,filemodified,OldFile,LargeFile1
'' narrow output to reasonable extent for debugging
iDaysOld = 500 '' change to match your cimcurstances: iDaysOld = 180
iByLarge = 3600000 '' detto: iByLarge = 104857600
'' build debug output header (two lines):
strResult = vbNewLine & Now _
& ToStr( "", 6) & ToStr( iDaysOld, 5) _
& ToStr( "", 6) & ToStr( iByLarge, 12) & " " & Wscript.ScriptFullName
strResult = strResult & vbNewLine & ToStr( "date", 10) & ToStr( "time", 9) _
& ToStr( "old?", 6) & ToStr( "days", 5) _
& ToStr( "big?", 6) & ToStr( "bytes", 12) & " file full path" & vbNewLine
Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set files = wmi.ExecQuery _
("Select * from CIM_DataFile Where Extension='log' AND Drive='c:'")
For Each file in files
'If LCase(Right(Cstr(file.Name), 3)) = "log" Then
iiAll = iiAll + 1
FileSize = CLng(file.FileSize) '' cast string as numeric
objSWbemDateTime.Value = file.lastModified
dFileDate = objSWbemDateTime.GetVarDate(True) '' convert CIM_datetime string to date
iFileAge = DateDiff("d", dFileDate, Now) '' get file age in days
booIsOld = (iFileAge > iDaysOld)
booIsBig = (Filesize >= iByLarge)
If booIsOld Then
OldFile = (file.Name & "," & OldFile)
iiOld = iiOld + 1
End If
If booIsBig Then
LargeFile = (file.Name & "," & LargeFile)
iiBig = iiBig + 1
End If
If (booIsOld or booIsBig) Then
'' populate debug output variable
strResult = strResult & vbNewLine & dFileDate _
& ToStr( booIsOld, 6) & ToStr( iFileAge, 5) _
& ToStr( booIsBig, 6) & ToStr( Filesize, 12) & " " & file.Name
''debug only'' & vbNewLine & TypeName(file.FileSize) & " " & file.FileSize
End If
If (booIsOld and booIsBig) Then
iiLaa = iiLaa + 1
End If
'End If
Next
' wscript.echo "tr_Oldlogfiles=" &OldFile
' wscript.echo "tr_Largelogfiles=" &LargeFile
'' recapitulation
strResult = strResult & vbNewLine & vbNewLine _
& " all=" & iiAll & " old=" & iiOld & " big=" & iiBig & " old&big=" & iiLaa
Wscript.Echo strResult '' make public debug output
Wscript.Quit
Function ToStr( xVariant, iLength)
ToStr = Right( Space( iLength) & CStr( xVariant), iLength)
End Function
输出:
==> cscript D:\VB_scripts\SO\36540447.vbs
11.04.2016 18:03:44 500 3600000 D:\VB_scripts\SO\36540447.vbs
date time old? days big? bytes file full path
05.04.2016 08:02:14 False 6 True 3600646 c:\windows\debug\mrt.log
11.04.2016 08:38:01 False 0 True 6458674 c:\windows\logs\cbs\cbs.log
19.03.2016 12:25:47 False 23 True 19358289 c:\windows\logs\dism\dism.log
22.08.2013 16:45:24 True 963 False 12962 c:\windows\security\logs\scesetup.log
22.08.2013 15:25:30 True 963 False 0 c:\windows\system32\config\components.log
22.08.2013 15:25:30 True 963 False 0 c:\windows\system32\config\default.log
22.08.2013 15:25:30 True 963 False 0 c:\windows\system32\config\security.log
22.08.2013 15:25:30 True 963 False 0 c:\windows\system32\config\software.log
22.08.2013 15:25:30 True 963 False 0 c:\windows\system32\config\system.log
18.03.2014 17:07:02 True 755 False 5446 c:\windows\vmgcoinstall.log
all=313 old=7 big=3 old&big=0
==>
只是在JosefZ的解决方案中添加了一个小函数来转换大小:
' Function to format a number into typical size scales
Function FormatSize(iSize)
Dim aLabel,i
aLabel = Array("bytes", "KB", "MB", "GB", "TB")
For i = 0 to 4
If iSize > 1024 Then iSize = iSize / 1024 Else Exit For End If
Next
FormatSize = Round(iSize, 2) & " " & aLabel(i)
End Function
在脚本中:
Option Explicit
'On Error Resume Next
On Error GoTo 0
Dim strResult '' debug output variable
Dim iFileAge, dFileDate, iByLarge, booIsOld, booIsBig, iiAll, iiBig, iiOld, iiLaa
Dim strComputer, wmi, files, objSWbemDateTime,fso,ws,LogFile
iiAll = 0: iiBig = 0: iiOld = 0: iiLaa = 0: strComputer = "."
Dim objFile,iDaysOld,item,objFSO,dateTime,Filesize,LargeFile,strCheckDate
Dim FileName,FileName1,Logs,GetFile,file,filemodified,OldFile,LargeFile1
'' narrow output to reasonable extent for debugging
iDaysOld = 500 '' change to match your cimcurstances: iDaysOld = 180
iByLarge = FormatSize(3600000) '' detto: iByLarge = 104857600
'wscript.echo iByLarge
'' build debug output header (two lines):
strResult = vbNewLine & Now _
& ToStr( "", 6) & vbTab & ToStr( iDaysOld, 5) _
& vbTab & ToStr( "", 6) & vbTab & ToStr( iByLarge, 12) & vbTab & " " & Wscript.ScriptFullName
strResult = strResult & vbNewLine & ToStr( "date", 10) & ToStr( "time", 9) _
& vbTab & ToStr( "old ?", 6) & vbTab & ToStr( "days", 5) _
& vbTab & ToStr( "big?", 6) & vbTab & ToStr( "bytes", 12) & vbTab & " file full path" & vbNewLine
Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set files = wmi.ExecQuery _
("Select * from CIM_DataFile Where Extension='log' AND Drive='c:'")
For Each file in files
'If LCase(Right(Cstr(file.Name), 3)) = "log" Then
iiAll = iiAll + 1
FileSize = FormatSize(file.FileSize) '' cast string as numeric
objSWbemDateTime.Value = file.lastModified
dFileDate = objSWbemDateTime.GetVarDate(True) '' convert CIM_datetime string to date
iFileAge = DateDiff("d", dFileDate, Now) '' get file age in days
booIsOld = (iFileAge > iDaysOld)
booIsBig = (Filesize >= iByLarge)
If booIsOld Then
OldFile = (file.Name & "," & OldFile)
iiOld = iiOld + 1
End If
If booIsBig Then
LargeFile = (file.Name & "," & LargeFile)
iiBig = iiBig + 1
End If
If (booIsOld or booIsBig) Then
'' populate debug output variable
strResult = strResult & vbNewLine & dFileDate _
& ToStr( booIsOld, 6) & vbTab & iFileAge _
& ToStr( booIsBig, 6) & vbTab & Filesize & " " & file.Name
''debug only'' & vbNewLine & TypeName(file.FileSize) & " " & file.FileSize
End If
If (booIsOld and booIsBig) Then
iiLaa = iiLaa + 1
End If
'End If
Next
' wscript.echo "tr_Oldlogfiles=" &OldFile
' wscript.echo "tr_Largelogfiles=" &LargeFile
'' recapitulation
strResult = strResult & vbNewLine & vbNewLine _
& " all=" & iiAll & vbTab & " old=" & iiOld & vbTab & " big=" & iiBig & vbTab & " old&big=" & iiLaa
Wscript.Echo strResult '' make public debug output
Set fso = CreateObject("Scripting.FileSystemObject")
LogFile = Left(Wscript.ScriptFullName, InstrRev(Wscript.ScriptFullName, ".")) & "txt"
If fso.FileExists(LogFile) Then
fso.DeleteFile(LogFile)
End If
Call WriteLog(strResult,LogFile)
set ws = CreateObject("wscript.shell")
ws.run "Notepad "& LogFile
Wscript.Quit
'******************************************************************
Function ToStr( xVariant, iLength)
ToStr = Right( Space( iLength) & CStr( xVariant), iLength)
End Function
'******************************************************************
' Function to format a number into typical size scales
Function FormatSize(iSize)
Dim aLabel,i
aLabel = Array("bytes", "KB", "MB", "GB", "TB")
For i = 0 to 4
If iSize > 1024 Then iSize = iSize / 1024 Else Exit For End If
Next
FormatSize = Round(iSize, 2) & " " & aLabel(i)
End Function
'******************************************************************
Sub WriteLog(strText,LogFile)
Dim fso,ts
Const ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(LogFile,ForAppending,True,-1)
ts.WriteLine strText
ts.Close
End Sub
'*****************************************************************