Войти

Показать полную графическую версию : [решено] Скрипт для удаления старых файлов и папок из определенной папки


Страниц : 1 [2] 3 4

vitaliyboch
18-08-2009, 12:59
Вот готовое решение, которое у меня выполняется через MS SMS 2003 для очистки каталогов временных папок на компьютерах пользователей.
Переменной, отвечающей за время устаревания файла является PurgeTime. В данный момент удаляются все файлы, которые старше 14 дней.


'==== Script Information Header ====
'script name: Purge Temp
'version: 1.0
'date: 16.07.08
'autor: Bochkarev Vitaly
'description: Скрипт удаляет устаревшие временные файлы с компьютера.

'==== Script Main Logic ====
on error resume next
const PurgeTime = 14 'days

'Exceptions - folders, which will not be processed
dim aExceptions(3)
aExceptions(0) = "Default User"
aExceptions(1) = "LocalService"
aExceptions(2) = "NetworkService"
aExceptions(3) = "All Users"

set oFSO = CreateObject("Scripting.Filesystemobject")
set oShell = createobject("wscript.shell")

'Set paths
sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%")
sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%")
sWinTempFolder = sWinDir & "\Temp"
sDocuments = "C:\Documents and Settings"

'Create log-file
sLogFileName = sWinTempFolder & "\PurgeTemp_" & Date
sLogFileName = Replace(sLogFileName, ".", "_")
sLogFileName = Replace(sLogFileName, "/", "_")
set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true)
oLogFile.WriteLine "========== Start purging =========="

'Purge Windows Temporary folder
oLogFile.WriteLine vbCrLf & "========== Windows Temporary folder =========="
PurgeFolder(sWinTempFolder)

'Purge Users Temporary folder and Users Temporary Internet Files
oLogFile.WriteLine vbCrLf & "========== Users Temporary folder and Users Temporary Internet Files =========="
set oDocuments = oFSO.GetFolder(sDocuments)
set colProfiles = oDocuments.SubFolders
for each oProfile in colProfiles
bFlag = false
for each sException in aExceptions
if InStr(oProfile.Path,sException) > 0 then
bFlag = true
exit for
end if
next
if bFlag = false then
PurgeFolder(oProfile.Path & "\Local Settings\Temp")
PurgeFolder(oProfile.Path & "\Local Settings\Temporary Internet Files")
end if
next

'Purge NOD32 Quarantine
oLogFile.WriteLine vbCrLf & "========== NOD32 Quarantine =========="
sQuarantine = sProgramFiles & "\Eset\Infected"
PurgeFolder(sQuarantine)

'Close log-file
oLogFile.WriteLine vbCrLf & "========== Stop purging =========="
oLogFile.Close

'PurgeFolder procedure
sub PurgeFolder(sFolderPath)
set oFolder = oFSO.GetFolder(sFolderPath)
set colFiles = oFolder.Files
for each oFile in colFiles
if (Date-oFile.DateLastModified) > PurgeTime and (Date-oFile.DateCreated) > PurgeTime then
oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated
oFSO.DeleteFile oFile.Path, true
if err.Number <> 0 then
oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
err.clear
end if
wscript.sleep 20
end if
next
set colSubFolders = oFolder.SubFolders
for each oSubFolder in colSubFolders
PurgeFolder(oSubFolder.Path)
if oSubFolder.Size = 0 then
oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated
oFSO.DeleteFolder oSubFolder.path
if err.Number <> 0 then
oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
err.clear
end if
end if
next
end sub

avfiga
18-08-2009, 18:21
Данный скрипт удаляет только файлы, а пустые папки остаются?

vitaliyboch
18-08-2009, 20:28
avfiga, он удаляет и старые файлы и папки, если они пустые.
if oSubFolder.Size = 0 then oFSO.DeleteFolder oSubFolder.path

Keeper2006
04-09-2009, 15:22
Может не в тему, но всёже отпишу, искал способ удалить файлы в папке которые старше X дней, и наткнулся на утилитку forfiles.exe входящию в набор Recourse kit, с помощью её можно легко добится этих целей. К примеру
forfiles.exe /p D:\Backup\IM\ /s /m *.* /d -14 /c "cmd /c del /q /f @file" Удаляет все файлы в папке D:\backup\IM\ старше 14 дней.

go it alone
28-01-2010, 17:27
как добавить задание forfiles.exe в планировщик? не получается...

R0iZ
02-03-2010, 07:06
как добавить задание forfiles.exe в планировщик? не получается... »
Написать эту строку в батник, и засунуть его в планировщик.

POOLEET
16-07-2010, 10:21
Здравствуйте, скажите а можно ли переделать этот код так что бы он удалял только скрытые файлы и перед каждым удалением спрашивал удалить файл или нет?
дата создания файла не важна.

deepred
17-07-2010, 00:40
POOLEET,

StrSource ="F:\[ Coding ]\del_hidden" ' проверяемая директория
Set FSO = CreateObject("Scripting.FileSystemObject")

For Each file in FSO.GetFolder(StrSource).Files
IF File.Attributes and 2 Then

PSH = MsgBox ("Вы действительно хотите удалить" _
& " файл" & Vbcrlf & FSO.GetFileName(File), 4+32, _
"Удаление скрытых файлов")

IF PSH = 6 Then: File.Delete: End IF
Else: count = count+1: End If
Next

For Each SubFolder In FSO.GetFolder(StrSource).SubFolders
IF SubFolder.Attributes and 2 Then

PSH = MsgBox ("Вы действительно хотите удалить" _
& " папку" & Vbcrlf & SubFolder.Name, 4+32, _
"Удаление скрытых файлов")

IF PSH = 6 Then: SubFolder.Delete: End IF
Else: count = count+1: End If
Next

IF count > 0 Then
MsgBox "Папка не содержит скрытых элементов", 0+64, _
"Удаление скрытых файлов"
End If
Wscript.Quit (0)

________________________________________________________________________

Вариант сценария на языке Jscript расположен в разделе:

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php?) » Компьютеры + Интернет (http://forum.oszone.net/forum-19.html) » Вебмастеру (http://forum.oszone.net/forum-22.html) »
Javascript Удаление скрытых файлов (http://forum.oszone.net/showthread.php?p=1456564&posted=1#post1456564) » post #2 (http://forum.oszone.net/post-1456564-2.html)
________________________________________________________________________

devids
06-06-2011, 14:10
Вот готовое решение, которое у меня выполняется через MS SMS 2003 для очистки каталогов временных папок на компьютерах пользователей. »

А как сделать, чтобы удалялись файлы, находящиеся в папках которые задаются в переменных окружения системы и пользователя
User variables
System variables
я их меняю, а в скрипте прописаны конкретные пути к этим папкам, т.е. скрипт на изменение User variables и System variables
не смотрит...
В крайнем случае, как можно указать конкретную папку, к примеру E:\Temp

j0nathan
15-02-2012, 09:48
Ребята, а можно в этом запросе:

forfiles.exe /p %temp% /s /m *.* /d -14 /c "cmd /c del /q /f @file"

сделать так чтобы оставалась 1 (последняя) копия не зависимо от даты. Это мне нужно, на случай сбоя резервного копирования т.к. этой командой я удаляю старые резервные копии.

rosalin
29-05-2012, 11:28
Вот готовое решение, которое у меня выполняется через MS SMS 2003 для очистки каталогов временных папок на компьютерах пользователей.
Переменной, отвечающей за время устаревания файла является PurgeTime. В данный момент удаляются все файлы, которые старше 14 дней »

У меня при запуске этого скрипта ничего не происходит
ОС win 2003

права Админ, скрипт создаю с расширением vbs , где можно посмотреть лог работы скрипта

Iska
29-05-2012, 11:49
где можно посмотреть лог работы скрипта »
Ищите файлы вида «PurgeTemp_<Дата>*.log» в «%SystemRoot%\Temp»

Денис_Пузатков@vk
19-10-2012, 11:10
Добрый день. А можно в данный скрипт внести изменении чтобы не удалялись пара каталогов с данными из папки?

Точнее, произвожу очистку папки данным скриптом, в папке есть пара папок которые оттуда перенести нельзя,можно ли видоизменить скрипт таким образом,чтобы при срабатывании он их не трогал,заранее спасибо за ответ…

Iska
19-10-2012, 12:30
А можно »
Можно.

Болванка кода:
Select Case objFolder.Name
Case "Папка1", "Папка2", "Папка3"
' Ничего не делать
Case Else
' Здесь обычное поведение для очистки из выбранного Вами скрипта
End Select


в данный скрипт »
Если внимательно посмотреть на тему, то станет понятно, что только Вам известно, какой из приведённых в ней скриптов Вы называете «данным».

Денис_Пузатков@vk
19-10-2012, 12:38
Прошу прошения что не указал какой именно...Вот этот
On Error Resume Next
intDays = Int(Wscript.arguments.Item(0))
strFldr = Wscript.arguments.Item(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
DelOld strFldr, intDays

Function DelOld(sFldr, iDays)
On Error Resume Next
Dim oD, cF, cD, oI

Set oD = objFSO.GetFolder(sFldr)
Set cF = oD.Files
Set cD = oD.SubFolders

For Each oI In cF
If DateDiff("d", oI.DateLastModified, Now) > iDays Then oI.Delete
Next

For Each oI In cD
DelOld oI.Path, iDays
If oI.Size = 0 Then oI.Delete
Next
End Function

если нетрудно,не могли бы вы вставить данный кусок кода в приведенный мной скрипт...спасибо..

Iska
19-10-2012, 13:40
For Each oI In cD
Select Case objFolder.Name
Case "Папка1", "Папка2", "Папка3"
' Ничего не делать
Case Else
DelOld oI.Path, iDays
If oI.Size = 0 Then oI.Delete
End Select
Next

Денис_Пузатков@vk
20-10-2012, 06:51
On Error Resume Next
intDays = Int(Wscript.arguments.Item(0))
strFldr = Wscript.arguments.Item(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
DelOld strFldr, intDays

Function DelOld(sFldr, iDays)
On Error Resume Next
Dim oD, cF, cD, oI

Set oD = objFSO.GetFolder(sFldr)
Set cF = oD.Files
Set cD = oD.SubFolders

For Each oI In cF
If DateDiff("d", oI.DateCreated, Now) > iDays Then
WScript.Echo oI.Path
oI.Attributes = 0
oI.Delete
End If
Next

For Each oI In cD
Select Case objFolder.Name
Case "Test"
Case Else
DelOld oI.Path, iDays
If oI.Size = 0 Then
oI.Attributes = 0
oI.Delete
End If
End Select
Next
End Function
Задача следующая из папки надо раз в неделю удалять все файлы,кроме двух определенных папок и того что в них находиться.
Запускается скрипт bat файлом со следующим содержанием cscript //Nologo MyCleanUp.VBS 1 D:\test >MyCleanupScript.Log
Попробовал в таком виде,из корня каталога файлы удаляются, но папки с файлами находящиеся в том же каталоге нет. Что не так?

Iska
20-10-2012, 07:17
Case "Test" »
Коллега, освойте уже, наконец, тэг (http://forum.oszone.net/misc.php?do=bbcode#code). Зачем здесь «Test»? Здесь должны быть имена папок, которые должны быть пропущены:
кроме двух определенных папок и того что в них находиться. »
[code]Case "Папка1", "Папка2", "Папка3" »

Денис_Пузатков@vk
20-10-2012, 07:28
Еще раз извиняюсь за глупые вопросы, ибо в данном вопросе плаваю. Test -это название одной из папок как ра.з

Iska
20-10-2012, 08:08
Test -это название одной из папок как ра.з »
Значит, получается, что и корневая (для начала очистки) папка —
D:\test »
и одна из вложенных в неё (которую надо пропускать при очистке), называются одинаково — «test»?




© OSzone.net 2001-2012