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

Компьютерный форум 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

 

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


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

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


Цитата vitaliyboch:
Вот готовое решение, которое у меня выполняется через MS SMS 2003 для очистки каталогов временных папок на компьютерах пользователей.
Переменной, отвечающей за время устаревания файла является PurgeTime. В данный момент удаляются все файлы, которые старше 14 дней »
У меня при запуске этого скрипта ничего не происходит
ОС win 2003

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

Отправлено: 11:28, 29-05-2012 | #31



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

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


Ветеран


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

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


Цитата rosalin:
где можно посмотреть лог работы скрипта »
Ищите файлы вида «PurgeTemp_<Дата>*.log» в «%SystemRoot%\Temp»
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:49, 29-05-2012 | #32


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


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

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


Добрый день. А можно в данный скрипт внести изменении чтобы не удалялись пара каталогов с данными из папки?

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

Отправлено: 11:10, 19-10-2012 | #33


Ветеран


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

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


Цитата Денис_Пузатков@vk:
А можно »
Можно.

Болванка кода:
Код: Выделить весь код
Select Case objFolder.Name
    Case "Папка1", "Папка2", "Папка3" 
        ' Ничего не делать
    Case Else
        ' Здесь обычное поведение для очистки из выбранного Вами скрипта
End Select
Цитата Денис_Пузатков@vk:
в данный скрипт »
Если внимательно посмотреть на тему, то станет понятно, что только Вам известно, какой из приведённых в ней скриптов Вы называете «данным».

Отправлено: 12:30, 19-10-2012 | #34


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


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

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


Прошу прошения что не указал какой именно...Вот этот
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

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

Отправлено: 12:38, 19-10-2012 | #35


Ветеран


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

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


Код: Выделить весь код
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

Отправлено: 13:40, 19-10-2012 | #36


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


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

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


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
Попробовал в таком виде,из корня каталога файлы удаляются, но папки с файлами находящиеся в том же каталоге нет. Что не так?

Отправлено: 06:51, 20-10-2012 | #37


Ветеран


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

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


Цитата Денис_Пузатков@vk:
Case "Test" »
Коллега, освойте уже, наконец, тэг [code]. Зачем здесь «Test»? Здесь должны быть имена папок, которые должны быть пропущены:
Цитата Денис_Пузатков@vk:
кроме двух определенных папок и того что в них находиться. »
Цитата Iska:
Код: Выделить весь код
Case "Папка1", "Папка2", "Папка3"
»

Отправлено: 07:17, 20-10-2012 | #38


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


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

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


Еще раз извиняюсь за глупые вопросы, ибо в данном вопросе плаваю. Test -это название одной из папок как ра.з

Отправлено: 07:28, 20-10-2012 | #39


Ветеран


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

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


Цитата Денис_Пузатков@vk:
Test -это название одной из папок как ра.з »
Значит, получается, что и корневая (для начала очистки) папка —
Цитата Денис_Пузатков@vk:
D:\test »
и одна из вложенных в неё (которую надо пропускать при очистке), называются одинаково — «test»?

Отправлено: 08:08, 20-10-2012 | #40



Компьютерный форум 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




 
Переход