2015-02-18 2 views
0

следующий VB скрипт, удалит файлы в Temp директории и содержать слово access.logVB скрипт + удалять файлы, содержащие слово и старше X месяц

как изменить этот сценарий VB для того, чтобы удалить только файлы, содержащие слово «access.log», и старые, затем 1 или 2 или 3 ... месяц

Я хочу добавить в VB параметр, который будет содержать месяц , и файлы будут удалены в соответствии с этим параметром

например, если Month_do_del = 12

Тогда только файлы, которые содержат access.log, что старые затем 12 месяцев будут удалены

If LCase(Right(Wscript.FullName, 11)) = "wscript.exe" Then 
    strPath = Wscript.ScriptFullName 
    strCommand = "%comspec% /k cscript """ & strPath & """" 
    Set objShell = CreateObject("Wscript.Shell") 
    objShell.Run(strCommand), 1, True 
    Wscript.Quit 
End If 

Set objNetwork = CreateObject("WScript.Network") 
strLog = "Files deleted on " & objNetwork.ComputerName & " at " & Now & VbCrLf & "====================================================" 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
strFilesToDelete = "" 
ShowSubFolders objFSO.GetFolder("G:\Temp") 
If InStr(strFilesToDelete, "|") > 0 Then 
arrFiles = Split(strFilesToDelete, "|") 
For Each strFilePath In arrFiles 
    DeleteFile strFilePath 
Next 
    ElseIf strFilesToDelete <> "" Then 
DeleteFile strFilesToDelete 
    Else 
WScript.Echo "No files were found." 
strLog = strLog & VbCrLf & "No files were found." 
End If 

Set objLogFile = objFSO.CreateTextFile("C:\FileDeletionLog.log", True) 
objLogFile.Write strLog 
objLogFile.Close 
Set objLogFile = Nothing 

    Sub ShowSubFolders(Folder) 
On Error Resume Next 
For Each objFile In Folder.Files 
    If Err.Number <> 0 Then 
     WScript.Echo "Error reading " & Folder.Path 
      strLog = strLog & VbCrLf & "Error reading " & Folder.Path 
     Err.Clear 
     On Error Resume Next 
     Exit For 
    Else 
     On Error GoTo 0 
      If Instr(UCase(objFile.Name), UCase ("access.log"))  Then 
      If strFilesToDelete = "" Then 
       strFilesToDelete = objFile.Path 
      Else 
         strFilesToDelete = strFilesToDelete & "|" & objFile.Path 
      End If 
     End If 
    End If 
    Next 
    For Each Subfolder in Folder.SubFolders 
    ShowSubFolders Subfolder 
    Next 
    End Sub 




    Sub DeleteFile(strFilePath) 
On Error Resume Next 
WScript.Echo "Deleting " & strFilePath 
objFSO.DeleteFile strFilePath, True 
If Err.Number <> 0 Then 
    WScript.Echo "Could not delete " & strFilePath 
    strLog = strLog & VbCrLf & "Could not delete " & strFilePath 
    Err.Clear 
    On Error GoTo 0 
Else 
    On Error GoTo 0 
     strLog = strLog & VbCrLf & "Successfully deleted " & strFilePath 
End If 
End Sub 

ответ

1

Я не знаю, если FileDateTime, Date и DateDiff поддерживаются в VBS. Если нет, вы можете легко перенести свой код VBS на VBA. DateDiff найдет разницу между двумя датами в месяцах.

Function CheckMonths(nMonths As Integer, fPath As String) As Boolean 
    CheckMonths = False 
    If DateDiff("m", FileDateTime(fPath), Date) = nMonths Then 
     CheckMonths = True 
    End If 
End Function 
+0

ТНХ Jeanno пожалуйста совет - где я могу добавить ваш код в моем сценарии? – maihabunash

+0

'If Instr (1, UCase (objFile.Name), UCase (" access.log ")) И CheckMonths (3, objFile.Name) Затем' – Jeanno

+0

первый I +1 для вас - Еще один краткий quastion, если, например, я хочу для удаления некоторых файлов, которые содержат access.log и VAR.log и ddd.log, то как поместить эти файлы в (.....), я пытаюсь ("access.log VAR.log ddd.log"), но его не работает? – maihabunash

1

Изменение этой линии

If Instr(UCase(objFile.Name), UCase ("access.log"))  Then 

к этому

If Instr(1, UCase(objFile.Name), UCase("access.log")) And DateDiff("m", objFile.DateLastModified, Date) >= 12 Then 
+0

первый I +1 для вас - еще один rlittle quastion, если, например, я хочу удалить некоторые файлы, которые содержат access.log и VAR.log и ddd.log, то как поместить эти файлы в (.....), Я пытаюсь ("access.log VAR.log ddd.log"), но не работает? – maihabunash

Смежные вопросы