Помогите написать vbs-скрипт, который будет сканировать папку и удалять из неё все файлы и папки старше x-дней.
» Автоматическое удаление папок и файлов старше x дней
сам недавно писал:
описание:
Удаляет старые бэкапы, (только RAR!!!!!!, если надо и другие расширения, поправь сам)
рядом с vbs должны лежать!!
файл логов delold.log
файл настроек delold.ini
настройки в ini:
foldbackup - путь к папке
termdate - интервал дней хранения, после которого удаляются архивы
except - названия папок, которые не надо сканировать (исключения)
пример ini:
foldbackup=\\srv-storage\BACKUP
termdate=30
except=desktop
except=site
сам vbs ^ ^
Код:
dim fso, foldback, termdate, except()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Set objShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
set Locator = createobject("wbemscripting.swbemlocator")
Set ServicesSet = locator.connectserver("","\root\cimv2")
foldpath = objShell.CurrentDirectory
inipath=foldpath & "\delold.ini"
logpath=foldpath & "\delold.log"
Set f = fso.GetFile(inipath)
Set flog = fso.GetFile(logpath)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
excount=0
Do Until ts.AtEndOfStream
templine = ts.ReadLine
if mid(templine,1 ,6)="except" then excount=excount + 1
Loop
redim except(excount)
ts.Close
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
exnumber=1
Do Until ts.AtEndOfStream
templine = ts.ReadLine
select case mid(templine,1,6)
case "foldba"
if len(templine)>11 then foldback = mid(templine,12,len(templine)-11)
case "termda"
if len(templine)>9 then termdate = int(mid(templine,10,len(templine)-9))
case "except"
if len(templine)>7 then except(exnumber)= mid(templine,8,len(templine)-7) : exnumber = exnumber + 1
end select
Loop
ts.Close
Set tslog = flog.OpenAsTextStream(ForAppending, TristateUseDefault)
currtime = Now()
tslog.writeline "-------------" & currtime & "--------------"
gofolder(foldback)
tslog.writeline "----------------------------------------------"
tslog.close
Set flog = Nothing
Set f = Nothing
set servicesset = nothing
set locator = nothing
set fso = nothing
set objshell = nothing
Private Sub GoFolder(ByVal fldSTR)
on error resume next
Dim fldRUN
Dim fldSUB
Dim Raschir
set fldRUN = fso.GetFolder(fldSTR)
for i=1 to excount
if lcase(fldRUN.name) = except(i) then exit sub
next
For Each fldSUB In fldRUN.SubFolders
GoFolder fldSUB
Next
For Each fileSUB In fldRUN.Files
raschir=""
Raschir = Mid(fileSUB.Name, Len(fileSUB.Name) - 2, 3)
If Raschir = "rar" Then
If (currtime - fileSUB.DateLastModified) > termdate Then
tslog.writeline fileSUB.path
fso.DeleteFile (fileSUB.path)
end if
end if
Next
End Sub
описание:
Удаляет старые бэкапы, (только RAR!!!!!!, если надо и другие расширения, поправь сам)
рядом с vbs должны лежать!!
файл логов delold.log
файл настроек delold.ini
настройки в ini:
foldbackup - путь к папке
termdate - интервал дней хранения, после которого удаляются архивы
except - названия папок, которые не надо сканировать (исключения)
пример ini:
foldbackup=\\srv-storage\BACKUP
termdate=30
except=desktop
except=site
сам vbs ^ ^
Код:
dim fso, foldback, termdate, except()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Set objShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
set Locator = createobject("wbemscripting.swbemlocator")
Set ServicesSet = locator.connectserver("","\root\cimv2")
foldpath = objShell.CurrentDirectory
inipath=foldpath & "\delold.ini"
logpath=foldpath & "\delold.log"
Set f = fso.GetFile(inipath)
Set flog = fso.GetFile(logpath)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
excount=0
Do Until ts.AtEndOfStream
templine = ts.ReadLine
if mid(templine,1 ,6)="except" then excount=excount + 1
Loop
redim except(excount)
ts.Close
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
exnumber=1
Do Until ts.AtEndOfStream
templine = ts.ReadLine
select case mid(templine,1,6)
case "foldba"
if len(templine)>11 then foldback = mid(templine,12,len(templine)-11)
case "termda"
if len(templine)>9 then termdate = int(mid(templine,10,len(templine)-9))
case "except"
if len(templine)>7 then except(exnumber)= mid(templine,8,len(templine)-7) : exnumber = exnumber + 1
end select
Loop
ts.Close
Set tslog = flog.OpenAsTextStream(ForAppending, TristateUseDefault)
currtime = Now()
tslog.writeline "-------------" & currtime & "--------------"
gofolder(foldback)
tslog.writeline "----------------------------------------------"
tslog.close
Set flog = Nothing
Set f = Nothing
set servicesset = nothing
set locator = nothing
set fso = nothing
set objshell = nothing
Private Sub GoFolder(ByVal fldSTR)
on error resume next
Dim fldRUN
Dim fldSUB
Dim Raschir
set fldRUN = fso.GetFolder(fldSTR)
for i=1 to excount
if lcase(fldRUN.name) = except(i) then exit sub
next
For Each fldSUB In fldRUN.SubFolders
GoFolder fldSUB
Next
For Each fileSUB In fldRUN.Files
raschir=""
Raschir = Mid(fileSUB.Name, Len(fileSUB.Name) - 2, 3)
If Raschir = "rar" Then
If (currtime - fileSUB.DateLastModified) > termdate Then
tslog.writeline fileSUB.path
fso.DeleteFile (fileSUB.path)
end if
end if
Next
End Sub
Мне бы попроще, чтобы скрипт тупо удалял все файлы и папки, в т.ч. подпапки, которые старше х дней.
(Нужно зачищать папку, которую пользователи используют для обмена данными.)
(Нужно зачищать папку, которую пользователи используют для обмена данными.)
у меня так работает много лет, взял тоже с форума, удаляет файлы старше N дней
сделай файл *.vbs и смотри
Option Explicit
Dim fso, dTwoDaysAgo
dTwoDaysAgo = Date() - 16
Set fso = CreateObject("Scripting.FileSystemObject")
DirWalk("c:\backup\")
Sub DirWalk(parmPath)
Dim oSubDir, oSubFolder, oFile, n
On Error Resume Next
Set oSubFolder = fso.getfolder(parmPath)
For Each oFile In oSubFolder.Files
If Err.Number <> 0 Then
Err.Clear
ElseIf oFile.DateLastModified < dTwoDaysAgo Then
fso.DeleteFile oFile.Path, True
End If
Next
For Each oSubDir In oSubFolder.Subfolders
DirWalk oSubDir.Path
Next
On Error Goto 0
End Sub
сделай файл *.vbs и смотри
Option Explicit
Dim fso, dTwoDaysAgo
dTwoDaysAgo = Date() - 16
Set fso = CreateObject("Scripting.FileSystemObject")
DirWalk("c:\backup\")
Sub DirWalk(parmPath)
Dim oSubDir, oSubFolder, oFile, n
On Error Resume Next
Set oSubFolder = fso.getfolder(parmPath)
For Each oFile In oSubFolder.Files
If Err.Number <> 0 Then
Err.Clear
ElseIf oFile.DateLastModified < dTwoDaysAgo Then
fso.DeleteFile oFile.Path, True
End If
Next
For Each oSubDir In oSubFolder.Subfolders
DirWalk oSubDir.Path
Next
On Error Goto 0
End Sub
Спасибо! Оба варианта отлично работают!
Цитата:
For Each oSubDir In oSubFolder.Subfolders
DirWalk oSubDir.Path
Next
Немного дополнив этот цикл можно удалять пустые папки.
For Each oSubDir In oSubFolder.SubFolders
DirWalk oSubDir.Path
If oSubDir.Size = 0 Then
oSubDir.Delete True
End If
Next
Еще можно задачу решить с помощью команды forfiles.
Вот пример удаляющий файлы в каталоге D:\Folder\ старше 7-ми дней с логированием:
Код:
rem Удалять файлы, старше дней
set Days=7
rem путь к файлам
set Path="D:\Folder\"
forfiles /p %Path% /m *.log /d -%Days% /c "CMD /C echo @PATH .. @fdate .. @fsize && del @PATH"
Вот пример удаляющий файлы в каталоге D:\Folder\ старше 7-ми дней с логированием:
Код:
rem Удалять файлы, старше дней
set Days=7
rem путь к файлам
set Path="D:\Folder\"
forfiles /p %Path% /m *.log /d -%Days% /c "CMD /C echo @PATH .. @fdate .. @fsize && del @PATH"
Страницы: 1
Предыдущая тема: Играть через RAdmin
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.