VBScript drobna zmiana w skrypcie


(wisnia37) #1

Witam serdecznie,
Znalazłem na necie fajny skrypt który kasuje w wybranym folderze pliki starsze niż x dni:

Const strPath = "G:\doskasowania"
Dim objFSO
Set objFSO = CreateObject(“Scripting.FileSystemObject”)

Call Search (strPath)

’ Comment out below line if you’d like to use this script in windows schedule task
WScript.Echo"Done."

Sub Search(str)
Dim objFolder, objSubFolder, objFile
Set objFolder = objFSO.GetFolder(str)
For Each objFile In objFolder.Files

    ' Use DateLastModified for modified date of a file
    If objFile.DateCreated < (Now() - 30) Then
        objFile.Delete(True)
    End If

Next
For Each objSubFolder In objFolder.SubFolders
    Search(objSubFolder.Path)

    ' Files have been deleted, now see if the folder is empty.
    If (objSubFolder.Files.Count = 0) Then
        objSubFolder.Delete True
    End If

Next

End Sub

Ten skrypt kasuje zawartość katalogu na dysku G do skasowania i tu pojawia się moje pytanie, jak dodać kilka lokalizacji żeby nie tworzyć osobnych plików skryptów?

Pozdrawiam


(Pablo_Wawa) #2

Widzę 2 rozwiązania:

  1. zrobisz (zdefiniujesz) tablicę z lokalizacjami do kasowania plików (zamiast Const strPath) i zamiast prostego wywołania Call Search (strPath) będzie to robione w pętli po zawartości zdefiniowanej tablicy.
  2. Zmodyfikujesz funkcję Search (Sub Search(str)) tak by pobierała tablicę lokalizacji i sama w pętli ją przetwarzała.

PS. Cudne jest to formatowanie kodu na tym forum!


(wisnia37) #3

Dziękuję za tak szybką odpowiedz :slight_smile:
Fakt kod się zlewa z resztą tekstu.

Niestety jestem kompletnym laikiem jeśli chodzi o programowanie dlatego byłbym wdzięczny za podanie przykładowego skryptu na podstawie dowolnego rozwiązania podanego przez Pana.

pozdrawiam


(Pablo_Wawa) #4

Zamiast wiersza
Const strPath = "G:\doskasowania"
robisz dwa z deklaracją ścieżek
Dim strPath
strPath = Array("G:\doskasowania","H:\doskasowania2","C:\Windows\TEMP")
oraz zamieniasz wiersz
Call Search (strPath)
na następujący kod:
For Loc = LBound(strPath) To UBound(strPath)
Call Search (strPath(Loc))
Next

Nie testowałem (piszę z pamięci), ale powinno być OK.


(wisnia37) #5

Działa wyśmienicie!

Bardzo dziękuje


(Pablo_Wawa) #6

Super. Proszę bardzo. :slight_smile:


#7

Wada składni / edytora Markdown.

jak się ręcznie by otoczyło znacznikiem bbcode to jest nawet kolorowanie
Const strPath = "D:\My Backups"
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
Call Search (strPath)
 
' Comment out below line if you'd like to use this script in windows schedule task
WScript.Echo"Done."
 
Sub Search(str)
    Dim objFolder, objSubFolder, objFile
    Set objFolder = objFSO.GetFolder(str)
    For Each objFile In objFolder.Files
 
        ' Use DateLastModified for modified date of a file
        If objFile.DateCreated < (Now() - 50) Then
            objFile.Delete(True)
        End If
 
    Next
    For Each objSubFolder In objFolder.SubFolders
        Search(objSubFolder.Path)
 
        ' Files have been deleted, now see if the folder is empty.
        If (objSubFolder.Files.Count = 0) Then
            objSubFolder.Delete True
        End If
 
    Next
End Sub


REM Usun pliki starsze niz 30 dni
forfiles /p "C:\Users\%USERPROFILE%\Downloads" /s /m *.* /c "cmd /c Del @path" /d -30

Po rozbudowaniu o usuwanie katalogów w sumie też by mogłobyć.