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

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

 

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


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

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


Да остаются.

Отправлено: 22:39, 24-10-2012 | #51



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

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


Ветеран


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

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


Цитата Денис_Пузатков@vk:
Цитата Iska:
В этих не удалённых папках остаются какие-либо папки/файлы? »
Да остаются. »
Потому папки и не удаляются.

А эти оставшиеся файлы — они действительно не старше указанного Вами при вызове скрипта числа дней?

Отправлено: 01:49, 25-10-2012 | #52


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


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

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


нет не старше....посмотрел внимательней,одна папка пустая есть

Отправлено: 10:01, 25-10-2012 | #53


Ветеран


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

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


Цитата Денис_Пузатков@vk:
нет не старше....посмотрел внимательней,одна папка пустая есть »
Значит, пинайте автора скрипта .

Отправлено: 23:39, 26-10-2012 | #54


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


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

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


У меня непонятка со скриптом. Он должен удалять файлы в сети в папках с русскими именами и с пробелами, но не делает этого, выдает ошибку. Говорят раньше он работал. Писал его не я, да и особо в этом не разбираюсь.

Собственно сам скрипт:

Код: Выделить весь код
'Производит поиск устаревших файлов и удаляет файлы старше 50 дней

set fso=Wscript.CreateObject("Scripting.FileSystemObject")
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "01", "\\vek\cr\Документы\`Сканированые изображения`\Бухгалтерия"
Dict.Add "02", "\\vek\cr\Документы\`Сканированые изображения`\Технический отдел"
Dict.Add "03", "\\vek\cr\Документы\`Сканированые изображения`\Отдел кадров"
Dict.Add "04", "\\vek\cr\Документы\`Сканированые изображения`\Комната ТП"
Dict.Add "05", "\\vek\cr\Документы\`Сканированые изображения`\Отдел логистики"

Arr = Dict.Items

For i=0 To Dict.Count-1
	Set fs = CreateObject("ScriptCodingInfo.FileSystem")
	For Each f1 In fs.WalkFiles(Arr(i))
	d = f1.DateLastModified
	diff = DateDiff("d",d,Now)
		if diff > 50 Then
		fso.DeleteFile (Arr(i) & "\" & f1.name)
	end if
	Next
Next

Отправлено: 13:41, 04-04-2013 | #55


Ветеран


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

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


Цитата DNBshon:
но не делает этого, выдает ошибку. »
Какую ошибку? Нажмите «Ctrl-C» в окне с сообщением об ошибке, затем вставьте полученный текст из буфера обмена сюда, обрамив его тэгом «code».

Отправлено: 17:06, 04-04-2013 | #56


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


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

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


Цитата Iska:
Код:
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 »

Так ...
А как сделать так , чтоб в этих Case "Папка1", "Папка2", "Папка3" , данные удалялись ... а сами папки нет ?

Отправлено: 13:15, 16-04-2013 | #57


Ветеран


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

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


Чтобы не удалялись пустые папки, закомментируйте строку
Код: Выделить весь код
If oI.Size = 0 Then oI.Delete
Чтобы папки "Папка1", "Папка2", "Папка3" попадали в обработку — уберите само условие «Select Case …».

Добиться данным скриптом корректной работы, чтобы данные удалялись, а папки — частично удалялись, частично нет, не получится. Ибо автором был изначально выбран неверный путь ориентации на размер папки при удалении (правильный путь — проверка количества вложенных папок и файлов).

Отправлено: 15:34, 16-04-2013 | #58


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


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

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


для файлов:
Код:

Код: Выделить весь код
intDays = Int(Wscript.arguments.Item(0))
strFldr = Wscript.arguments.Item(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDIR = objFSO.GetFolder(strFldr)
Set objCol = objDIR.Files

For Each objItem In objCol
   If DateDiff("d", objItem.DateLastModified, Now) > intDays Then objItem.Delete
Next
использование:

Код: Выделить весь код
CScript MyScript.VBS 14 C:\TEST
Подскажите по поводу данного куска кода.
Особенно второй аргументы.
Меня интересует если в названии папки присутствует пробел.

например C:\Program Files\ он правильно примет аргументы ?
Или нужно будет указать "C:\Program Files\" ?

Отправлено: 17:06, 16-05-2013 | #59


Ветеран


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

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


Цитата lipro122:
использование:
Код: Выделить весь код
CScript MyScript.VBS 14 C:\TEST

Меня интересует если в названии папки присутствует пробел. »
Правильное использование:
Код: Выделить весь код
cscript.exe //nologo "Путь\MyScript.VBS" "C:\TEST TEST TEST"
Цитата lipro122:
например C:\Program Files\ он правильно примет аргументы ?
Или нужно будет указать "C:\Program Files\" ? »
Код: Выделить весь код
cscript.exe //nologo "Путь\MyScript.VBS" "C:\Program Files"
P.S. Лучше сразу заиметь привычку заключать пути в качестве аргументов скриптов WSH в кавычки, независимо от наличия в них пробелов. Привыкнете — станете делать сие автоматически.

Отправлено: 03:31, 17-05-2013 | #60



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




 
Переход