Показать полную графическую версию : [решено] Удаление файлов меньше определенного размера
Нужен простенький скриптик.. Есть папка, допустим с:\papka, нужно чтобы скрипт удалял в ней все файлы меньшие по размеру чем 9кб. Плюс, если это возможно удалял все файлы в данной папке, независимо от размера, дата создания которых старше чем 6 дней от текущей даты.
И второй скрипт нужен, он тоже простой. копировать все файлы из папки c:\papka в папку c:\papka2
Вообще, можно их объединить, чтобы первым действием скрипт удалял все файлы меньше 9кб по размеру(и старше 6 дней созданные), а затем копировал оставшиеся в папку2
Заранее огромное спасибо
Ivan Bardeen
12-02-2011, 17:56
Вот, VBS скрипт
DeathLine = 6
Folder = "c:\papka"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Folder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Datefile = objfile.DateCreated
DiffDate = DateDiff("d",Datefile,Now)
WScript.Echo DiffDate
If DiffDate > DeathLine Then
objfile.Delete(TRUE)
Else If objfile.Size < 9216 Then
objfile.Delete(TRUE)
Else
objFSO.CopyFile objFile.Path, "c:\papka2\"
End If
End If
Next
Спасибо!
Только два момента:
1. Почему-то выскакивает окно с цифрой 0 и единственной кнопкой Ок по поводу каждого файла, нельзя ли его не отображать, а то когда 200 файлов не очень удобно
2. Измените пожалуйста копировать на вырезать, я неправильно выразился.
Спасибо!
Только два момента:
1. Почему-то выскакивает окно с цифрой 0 и единственной кнопкой Ок по поводу каждого файла, нельзя ли его не отображать, а то когда 200 файлов не очень удобно
2. Измените пожалуйста копировать на вырезать, я неправильно выразился. »
DeathLine = 6
Folder = "c:\papka"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Folder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Datefile = objfile.DateCreated
DiffDate = DateDiff("d",Datefile,Now)
' WScript.Echo DiffDate
If DiffDate > DeathLine Then
objfile.Delete(TRUE)
Else If objfile.Size < 9216 Then
objfile.Delete(TRUE)
Else
objFSO.MoveFile objFile.Path, "c:\papka2\"
End If
End If
Next
Спасибо, то, что нужно!
Только теперь обнаружил, не удаляет файлы, созданные позднее 6 дней до текущей даты, т.е. переносит их как подходящие под условия...
Ivan Bardeen
14-02-2011, 09:52
Только теперь обнаружил, не удаляет файлы, созданные позднее 6 дней до текущей даты, т.е. переносит их как подходящие под условия... »
хм... скрипт удаляет файл, если он старше 6 дней ИЛИ меньше 9Kb - остальные перемещает.
А что не так?
вот же ваше условие:
нужно чтобы скрипт удалял в ней все файлы меньшие по размеру чем 9кб. Плюс, если это возможно удалял все файлы в данной папке, независимо от размера, дата создания которых старше чем 6 дней от текущей даты. »
А что не так?
вот же ваше условие: »
У меня тоже всё работает.
Странно, у меня почему-то не удаляет старше 6-ти дней, только меньше 9кб, сегодня ещё раз попробую вечером, спасибо
Ivan Bardeen
14-02-2011, 16:50
XXXp,
покажите вывод скрипта, указав путь к файлу, который старше 6 дней и не удаляется
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("путь_к_файлу")
Wscript.Echo "Date created: " & objFile.DateCreated & Vbcrlf & "Date last accessed: " & objFile.DateLastAccessed & vbcrlf & "Date last modified: " & objFile.DateLastModified
SendMessage
14-02-2011, 19:42
XXXp, может Вы для проверки скопировали куда-нибудь свою "c:\papka" и там пытаетесь скриптом работать?
При этом действии у всех файлов дата создания изменится на нынешнюю (а дата модификации остается неизменной). И, естественно, скрипту нечего удалять по условию 6 дней.
Ivan Bardeen
14-02-2011, 20:48
SendMessage,
Та же мысль возникла : )
Посему и попросил автора показать вывод скрипта
Да да, все верно, я перед проверкой копирую файлы в c:\papka и у каждого файла соотв. два параметра: первый "дата создания", второй "дата изменения". Соответственно первый остается неизменным, можно ли именно его брать за основу, т.е. если дата создания файла более 6 дней от текущей - файл удалять..
Ivan Bardeen
14-02-2011, 23:51
XXXp,
Вывод скрипта покажете?
PS: Мой скрипт работает, можете его применять в "продуктиве"
SendMessage
15-02-2011, 04:06
Неизменной остается при копировании дата модификации.
Если это то, что Вам нужно, замените в скрипте строку Datefile = objfile.DateCreated на Datefile = objfile.DateLastModified
Вот! Теперь все работает для моего случая, видимо я просто неправильно выразился! Спасибо большое всем Вам за помощь!
А как сделать, чтобы этот скрипт удалял файлы и в подпапках?
Здравствуйте, уважаемые форумчане.
Хотел с помощью данного скрипта, сделать, чтобы удалялись файлы размером более 500 метров.
И чтобы файлы также искались и в под-папках. Помогите. Я в этом не особо шарю сильно не пинайте..
Вот что я наковырял:
Folder = "c:\1\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Folder)
If objfile.Size > 512000 Then
objfile.Delete(TRUE)
End If
End If
Next
DmitriiV
03-05-2012, 12:36
Leem111, используйте функцию, вызываемую рекурсивно. Пример:
Public objFSO
Folder = "c:\1\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(Folder) Then
Call ClrFolder(Folder)
WScript.Echo "Готово."
Else
WScript.Echo "Не найден путь " & Folder
End If
WScript.Quit 0
Function ClrFolder(strFolder)
Dim objFolder, objFile, objSubFolder
Set objFolder = objFSO.GetFolder(strFolder)
For Each objFile In objFolder.Files
If objFile.Size > 512000 Then objFile.Delete TRUE
Next
For Each objSubFolder In objFolder.SubFolders
Call ClrFolder(objSubFolder.Path)
Next
End Function
El Sanchez
03-05-2012, 13:08
более 500 метров »
objFile.Size > 512000 »
DmitriiV, нужно 524288000
DmitriiV
03-05-2012, 15:12
нужно 524288000 »Для сути решения это совершенно неважно. Поэтому было оставлено значение, использованное в заготовке автора темы.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.