|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки |
|
|
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки
|
|
Новый участник Сообщения: 5 |
Здравствуйте! Помогите пожалуйсто создать скрипт для удаления старых файлов и папок старше n - дней из определенной папки.
Нашел такой скрипт который удаляет старые файлы из корневого каталога, а как переделать его так что б он удалял все папки и файлы старше n - дней незнаю. Если кто то сможет помочь заранее огромное спаибо !!!!!!!!!!! Пример скрипта: RunForFiles "C:\Test\" 'файлы, среди которых будет производиться поиск устаревших, лежат в этой директории
Function RunForFiles(folderspec)
Dim fso, f, f1, fc
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
WScript.Echo (folderspec & f1.name) 'вывод сообщения с именем файла, который будет удален. используется в тестовых целях, в рабочем скрипте нужно отключить
If CompareDate(folderspec & f1.name) = True Then Log(folderspec & f1.name)
'DelFile(folderspec & f1.name) 'удалить файл. сейчас удаление отключено для отладки.
Next
End Function
'***************************************************************
'Возвращает True, если дата создания файла больше 14-ти дней
Function CompareDate(strFileName)
Dim fso, f, s, i
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(strFileName)
i = DateDiff("d", f.DateCreated, Now)
If i > 14 Then 'здесь указывается количество дней, которое используется для сравнения с датой создания файла, т.е., в этом примере удаляются все файлы, созданные раньше, чем 14 дней назад
'WScript.Echo(strFileName&" "&i) 'вывести имя файла и его возраст, используется для отладки
CompareDate = True
Else
CompareDate = False
End If
End Function
'****************************************************************
'функция для извлечения пути
Function ExpandPath(strFullFileName)
ExpandPath = Left(strFullFileName,instrrev(strFullFileName,"\"))
End Function
'***************************************************************
Function DelFile(strFullFileName)
Dim fso, F
Set fso = CreateObject("Scripting.FileSystemObject")
Set F = fso.GetFile(strFullFileName)
F.Delete
End Function
'****************************************************************
'функция для создания log-файла. он создается рядом со скриптом, имя - дата запуска скрипта.
Function Log(strLineToLog)
Const ForReading = 1, ForWriting = 2
Dim fso, f, r, FileLog
r = ""
FileLog = Left(WScript.ScriptName,(Len(WScript.ScriptName)-4)) & "_" & DatePart("yyyy",Date) & "_" & DatePart("m",Date) & "_" & DatePart("d",Date) & "." & "log"
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(FileLog)) Then
Set f = fso.OpenTextFile(FileLog, Forreading, True)
r = f.Readall
f.Close
Set f = fso.OpenTextFile(FileLog, ForWriting, True)
f.Write strLineToLog & vbCrLf & r
f.Close
Else
Set f = fso.OpenTextFile(FileLog, ForWriting, True)
f.Write strLineToLog
f.Close
End If
End Function
|
|
|
Отправлено: 13:39, 25-07-2009 |
|
Пользователь Сообщения: 72
|
Профиль | Сайт | Отправить PM | Цитировать Вот готовое решение, которое у меня выполняется через 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
|
|
------- Отправлено: 12:59, 18-08-2009 | #21 |
|
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Данный скрипт удаляет только файлы, а пустые папки остаются?
|
|
Отправлено: 18:21, 18-08-2009 | #22 |
|
Пользователь Сообщения: 72
|
Профиль | Сайт | Отправить PM | Цитировать avfiga, он удаляет и старые файлы и папки, если они пустые.
if oSubFolder.Size = 0 then oFSO.DeleteFolder oSubFolder.path |
|
------- Отправлено: 20:28, 18-08-2009 | #23 |
|
Старожил Сообщения: 285
|
Профиль | Отправить PM | Цитировать Может не в тему, но всёже отпишу, искал способ удалить файлы в папке которые старше X дней, и наткнулся на утилитку forfiles.exe входящию в набор Recourse kit, с помощью её можно легко добится этих целей. К примеру
Цитата:
|
|
|
Отправлено: 15:22, 04-09-2009 | #24 |
|
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать как добавить задание forfiles.exe в планировщик? не получается...
|
|
Последний раз редактировалось go it alone, 28-01-2010 в 17:39. Отправлено: 17:27, 28-01-2010 | #25 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать Цитата go it alone:
|
|
|
------- Отправлено: 07:06, 02-03-2010 | #26 |
|
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Здравствуйте, скажите а можно ли переделать этот код так что бы он удалял только скрытые файлы и перед каждым удалением спрашивал удалить файл или нет?
дата создания файла не важна. |
|
Отправлено: 10:21, 16-07-2010 | #27 |
|
Пользователь Сообщения: 140
|
Профиль | Отправить PM | Цитировать 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 » Компьютеры + Интернет » Вебмастеру » Javascript Удаление скрытых файлов » post #2 ________________________________________________________________________ |
|
Последний раз редактировалось deepred, 20-07-2010 в 20:05. Причина: Добавлена ссылка на Jscript Отправлено: 00:40, 17-07-2010 | #28 |
|
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Цитата vitaliyboch:
User variables System variables я их меняю, а в скрипте прописаны конкретные пути к этим папкам, т.е. скрипт на изменение User variables и System variables не смотрит... В крайнем случае, как можно указать конкретную папку, к примеру E:\Temp |
|
|
Отправлено: 14:10, 06-06-2011 | #29 |
|
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 09:48, 15-02-2012 | #30 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| CMD/BAT - [решено] Помогите найти скрипт для удаленного удаления програм | magwolf | Скриптовые языки администрирования Windows | 20 | 01-02-2016 23:35 | |
| Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP | Dark Ange1 | Скриптовые языки администрирования Windows | 11 | 07-03-2010 13:34 | |
| [решено] Скрипт для удаления нужных слов в ini файле | Pozia | AutoIt | 23 | 27-10-2009 18:42 | |
| CMD/BAT - [решено] Создание CMD/BAT файла для удаления лишних папок | Vsirf | Скриптовые языки администрирования Windows | 4 | 04-06-2009 20:37 | |
| Скрипт для удаления директорий | dallas | Программирование и базы данных | 5 | 15-01-2003 19:28 | |
|