1

Тема: VBScript: удаление файлов старше N количества дней

Как это скрипт передалать,чтобы было больше одного пути для удаления?допустим сколько захочу!

' ---------- 
' Начало основной секции. Отсюда начнется выполнение при запуске скрипта. 
Set FSO = CreateObject("Scripting.FileSystemObject")
' директория, где будут храниться бэкапы. Вы должны вписать свою директорию
' вместо "X:\DailyBackup"
sDir = "D:\backup"
Set objDir = GetFolder(sDir)
DeleteOlderFiles(objDir)

' ---------- Секция функций

' Получить файл
Function GetFile(sFile)
 On Error Resume Next
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set GetFile = FSO.GetFile(sFile)
 if err.number <> 0 then
    WScript.Echo "Error Opening file " & sFile & VBlf & "["&Err.Description&"]"
    Wscript.Quit Err.number
 end if
End Function 

' Получить папку
Function GetFolder (sFolder)
 On Error Resume Next
 
 Set GetFolder = FSO.GetFolder(sFolder)
 if err.number <> 0 then
    WScript.Echo "Error Opening folder " & sFolder & VBlf & "["&Err.Description&"]"
    Wscript.Quit Err.number
 end if
End Function 

' удалить один файл (имя файла передается в sFile)
Sub DeleteFile(sFile)
 On Error Resume Next

 FSO.DeleteFile sFile, True
 if err.number <> 0 then
    WScript.Echo "Error Deleteing file " & sFile & VBlf & "["&Err.Description&"]"
    Wscript.Quit Err.number
 end if
End Sub 

' Удалить файлы старше 7 дней
Sub DeleteOlderFiles(objDir)
    ' просматриваем все файлы в директории
    for each efile in objDir.Files        
        ' используем DateLastModified, а не DateCreated, поскольку
        ' DateCreated не всегда возвращает правильную дату
        FileDate = efile.DateLastModified 
        Age = DateDiff("d",Now,FileDate)        
        ' в данном случае возраст файла не больше семи дней
        If Abs(Age)>7 Then 
            DeleteFile(efile)
        End If        
    next 
End Sub

2 (изменено: arcnik, 2011-04-29 10:58:59)

Re: VBScript: удаление файлов старше N количества дней

Доброго времени суток!
Я сделал так!

a1=InputBox("Введите дату"&Chr(10)&"Пример : 21.12.2111", "Дата")
ada1=Mid(a1,7, 4)&Mid(a1,4, 2)&Mid(a1,1, 2)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dict = CreateObject("Scripting.Dictionary")
With Dict 'Перечисляем пути поиска
.Item(1) = "D:\test\"
.Item(2) = "D:\test\словарь\"
End With
for aa1=1 to 2 ' перечислить кол-во получившихся путей)
Set Folder = FSO.GetFolder(Dict.Item(aa1))
For Each File In Folder.Files
aa=File.DateCreated
a2= Mid(aa,7, 4)&Mid(aa,4, 2)&Mid(aa,1, 2)
n= File.Path
if ada1>a2 then
FSO.CopyFile n, "D:\Backup\", 0
FSO.DeleteFile n, 0
end if
Next
Next

Как итог, все файлы старше введенной даты будут удалены и резервно копированы

3 (изменено: Rumata, 2011-04-29 11:36:03)

Re: VBScript: удаление файлов старше N количества дней

arcnik пишет:

Я сделал так!

А зачем использовать Dictionary, когда обычного массива достаточно?

djrust пишет:

Как это скрипт передалать,чтобы было больше одного пути для удаления?допустим сколько захочу!

Указываете необходимые каталоги в командной строке. Проверяете все переданные аргументы и дальше уже выполняете требуемые действия

cscript script.vbs "C:\Program Files" C:\WINDOWS C:\Users

fso = CreateObject("Scripting.FileSystemObject")
For i = 0 To WScript.Arguments.Count
    f = WScript.Arguments.Item(i)
    If fso.FolderExists(f) Then
...
Next
( 2 * b ) || ! ( 2 * b )

4

Re: VBScript: удаление файлов старше N количества дней

Rumata пишет:
arcnik пишет:

Я сделал так!

А зачем использовать Dictionary, когда обычного массива достаточно?

Не вопрос...

a1=InputBox("Введите дату"&Chr(10)&"Пример : 21.12.2111", "Дата")
ada1=Mid(a1,7, 4)&Mid(a1,4, 2)&Mid(a1,1, 2)
Set FSO = CreateObject("Scripting.FileSystemObject")
s1="D:\test\1\"
s2="D:\test\2\"
g1=Array(s1, s2)
for aa1=0 to 1
Set Folder = FSO.GetFolder(g1(aa1))
For Each File In Folder.Files
aa=File.DateCreated
a2= Mid(aa,7, 4)&Mid(aa,4, 2)&Mid(aa,1, 2)
n= File.Path
if ada1>a2 then
FSO.CopyFile n, "D:\test\temp\", 0
FSO.DeleteFile n, 0
end if
Next
Next
WScript.Quit 1

Я новичок в этом деле.
А если посмотреть в корень проблемы, то непонятно зачем копировать и удалять, когда можно просто перенести файлы в нужную папку.
Да кстати еще надо поработать над проблемой с одинаковыми именами файлов.

5

Re: VBScript: удаление файлов старше N количества дней

OFF: arcnik, старайтесь использовать отступы — такой код:

a1 = InputBox("Введите дату" & Chr(10) & "Пример : 21.12.2111", "Дата")
ada1 = Mid(a1, 7, 4) & Mid(a1, 4, 2) & Mid(a1, 1, 2)

Set FSO = CreateObject("Scripting.FileSystemObject")

s1 = "D:\test\1\"
s2 = "D:\test\2\"
g1 = Array(s1, s2)

For aa1 = 0 To 1
    Set Folder = FSO.GetFolder(g1(aa1))
    
    For Each File In Folder.Files
        aa = File.DateCreated
        a2 = Mid(aa, 7, 4) & Mid(aa, 4, 2) & Mid(aa, 1, 2)
        n  = File.Path
        
        If ada1 > a2 Then
            FSO.CopyFile n, "D:\test\temp\", 0
            FSO.DeleteFile n, 0
        End If
    Next
Next

WScript.Quit 1

читается не в пример легче. Ну, и неплохо бы давать переменным «говорящие» имена.