strComputer = "."
str7z = "D:\7-Zip\7z.exe"
i=0
If WScript.Arguments.Count = 0 then
WScript.Echo "Falta Path para Directório. Utilização: cscript compress.vbs dir1 ""dir 2"" (etc)"
Else
'Por cada pasta passada como argumento
For Each strArgument in WScript.Arguments
strDir = WScript.Arguments.Item(i)
Set oShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'Colecção de ficheiros dentro da pasta strDir
Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='"& strDir &"'} Where " _
& "ResultClass = CIM_DataFile")
'Monitor de processos que me informa dos processos que são terminados
Set colMonitoredProcesses = objWMIService. _
ExecNotificationQuery("select * from __instancedeletionevent " _
& "within 1 where TargetInstance isa 'Win32_Process'")
If colFiles.Count >0 Then
'Por cada ficheiro
For Each objFile In colFiles
'Só os Logs é que interessam. Qualquer outro ficheiro passa a frente
If WMIDateStringToDate(objFile.CreationDate) < now() And objFile.Extension = "log" Then
'Rotina de compressão
oShell.Run ""& str7z &" a -tzip """& strDir &"""\"& objFile.FileName &".zip "_
& " """& strDir &"""\"& objFile.FileName &".log"
WScript.Echo "Criei o ficheiro "& strDir &"\"& objFile.FileName &".zip "
'Rotina de eliminação de logs
z = 0
'Loop de espera (sleep até o zip estar terminado)
Do While z = 0
Set objLatestProcess = colMonitoredProcesses.NextEvent
If objLatestProcess.TargetInstance.Name = "7z.exe" Then
'o processo 7z acabou; posso sair do loop de espera e apagar o log original
objFile.Delete
WScript.Echo "Apaguei o ficheiro "& strDir &"\"& objFile.FileName &"."& objFile.Extension &" "
z = 1
'nao deve ser necessário, mas....
Exit Do
End If
Loop
End If
Next
End if
i = i+1
Next
End If
'função para alterar o formato da data retornado pelo wmi_script
Function WMIDateStringToDate(dtmDate)
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & _
Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate, _
13, 2))
End Function
WScript.Quit



