Vbscript从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

我已经写了一个vbscript来从C驱动器中查找180天以前的日志文件。现在,下面脚本中的问题是,我能够从C驱动器获得所有日志文件的详细信息,但不是180天以前。谁能帮我修改一下脚本吗

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
'*****************************************************************