Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки

Ответить
Настройки темы
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Помогите пожалуйсто создать скрипт для удаления старых файлов и папок старше 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
Этот скрипт удалит в указанной папке все файлы, которые были созданы 14 и больше дней назад.

Отправлено: 13:39, 25-07-2009

 

Пользователь


Сообщения: 72
Благодарности: 27

Профиль | Сайт | Отправить 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

-------
Статьи для системных инженеров http://www.sysengineering.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:59, 18-08-2009 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Данный скрипт удаляет только файлы, а пустые папки остаются?

Отправлено: 18:21, 18-08-2009 | #22


Пользователь


Сообщения: 72
Благодарности: 27

Профиль | Сайт | Отправить PM | Цитировать


avfiga, он удаляет и старые файлы и папки, если они пустые.
if oSubFolder.Size = 0 then oFSO.DeleteFolder oSubFolder.path

-------
Статьи для системных инженеров http://www.sysengineering.ru


Отправлено: 20:28, 18-08-2009 | #23


Старожил


Сообщения: 285
Благодарности: 60

Профиль | Отправить PM | Цитировать


Может не в тему, но всёже отпишу, искал способ удалить файлы в папке которые старше 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 дней.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 04-09-2009 | #24


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


как добавить задание forfiles.exe в планировщик? не получается...

Последний раз редактировалось go it alone, 28-01-2010 в 17:39.


Отправлено: 17:27, 28-01-2010 | #25


Аватара для R0iZ

Пользователь


Сообщения: 117
Благодарности: 11

Профиль | Сайт | Отправить PM | Цитировать


Цитата go it alone:
как добавить задание forfiles.exe в планировщик? не получается... »
Написать эту строку в батник, и засунуть его в планировщик.

-------
Чайковский форум


Отправлено: 07:06, 02-03-2010 | #26


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, скажите а можно ли переделать этот код так что бы он удалял только скрытые файлы и перед каждым удалением спрашивал удалить файл или нет?
дата создания файла не важна.

Отправлено: 10:21, 16-07-2010 | #27


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:10, 06-06-2011 | #29


Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ребята, а можно в этом запросе:

Код: Выделить весь код
 forfiles.exe /p %temp% /s /m *.* /d -14 /c "cmd /c del /q /f @file"
сделать так чтобы оставалась 1 (последняя) копия не зависимо от даты. Это мне нужно, на случай сбоя резервного копирования т.к. этой командой я удаляю старые резервные копии.

Отправлено: 09:48, 15-02-2012 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход