Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление файлов меньше определенного размера (http://forum.oszone.net/showthread.php?t=199295)

XXXp 12-02-2011 15:37 1611044

Удаление файлов меньше определенного размера
 
Нужен простенький скриптик.. Есть папка, допустим с:\papka, нужно чтобы скрипт удалял в ней все файлы меньшие по размеру чем 9кб. Плюс, если это возможно удалял все файлы в данной папке, независимо от размера, дата создания которых старше чем 6 дней от текущей даты.
И второй скрипт нужен, он тоже простой. копировать все файлы из папки c:\papka в папку c:\papka2
Вообще, можно их объединить, чтобы первым действием скрипт удалял все файлы меньше 9кб по размеру(и старше 6 дней созданные), а затем копировал оставшиеся в папку2

Заранее огромное спасибо

Ivan Bardeen 12-02-2011 17:56 1611158

Вот, 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


XXXp 12-02-2011 23:56 1611404

Спасибо!
Только два момента:
1. Почему-то выскакивает окно с цифрой 0 и единственной кнопкой Ок по поводу каждого файла, нельзя ли его не отображать, а то когда 200 файлов не очень удобно
2. Измените пожалуйста копировать на вырезать, я неправильно выразился.

Спасибо!

OSArev 13-02-2011 01:23 1611447

Цитата:

Цитата XXXp
Только два момента:
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


XXXp 13-02-2011 02:06 1611460

Спасибо, то, что нужно!
Только теперь обнаружил, не удаляет файлы, созданные позднее 6 дней до текущей даты, т.е. переносит их как подходящие под условия...

Ivan Bardeen 14-02-2011 09:52 1612429

Цитата:

Цитата XXXp
Только теперь обнаружил, не удаляет файлы, созданные позднее 6 дней до текущей даты, т.е. переносит их как подходящие под условия... »

хм... скрипт удаляет файл, если он старше 6 дней ИЛИ меньше 9Kb - остальные перемещает.
А что не так?
вот же ваше условие:
Цитата:

Цитата XXXp
нужно чтобы скрипт удалял в ней все файлы меньшие по размеру чем 9кб. Плюс, если это возможно удалял все файлы в данной папке, независимо от размера, дата создания которых старше чем 6 дней от текущей даты. »


OSArev 14-02-2011 15:46 1612701

Цитата:

Цитата Ivan Bardeen
А что не так?
вот же ваше условие: »

У меня тоже всё работает.

XXXp 14-02-2011 16:24 1612736

Странно, у меня почему-то не удаляет старше 6-ти дней, только меньше 9кб, сегодня ещё раз попробую вечером, спасибо

Ivan Bardeen 14-02-2011 16:50 1612770

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 1612891

XXXp, может Вы для проверки скопировали куда-нибудь свою "c:\papka" и там пытаетесь скриптом работать?
При этом действии у всех файлов дата создания изменится на нынешнюю (а дата модификации остается неизменной). И, естественно, скрипту нечего удалять по условию 6 дней.

Ivan Bardeen 14-02-2011 20:48 1612937

SendMessage,
Та же мысль возникла : )
Посему и попросил автора показать вывод скрипта

XXXp 14-02-2011 22:57 1613039

Да да, все верно, я перед проверкой копирую файлы в c:\papka и у каждого файла соотв. два параметра: первый "дата создания", второй "дата изменения". Соответственно первый остается неизменным, можно ли именно его брать за основу, т.е. если дата создания файла более 6 дней от текущей - файл удалять..

Ivan Bardeen 14-02-2011 23:51 1613077

XXXp,
Вывод скрипта покажете?
PS: Мой скрипт работает, можете его применять в "продуктиве"

SendMessage 15-02-2011 04:06 1613167

Неизменной остается при копировании дата модификации.
Если это то, что Вам нужно, замените в скрипте строку
Код:

Datefile = objfile.DateCreated
на
Код:

Datefile = objfile.DateLastModified

XXXp 16-02-2011 12:29 1614280

Вот! Теперь все работает для моего случая, видимо я просто неправильно выразился! Спасибо большое всем Вам за помощь!

Leem111 16-12-2011 09:14 1816300

А как сделать, чтобы этот скрипт удалял файлы и в подпапках?

Leem111 03-05-2012 11:04 1909682

Здравствуйте, уважаемые форумчане.
Хотел с помощью данного скрипта, сделать, чтобы удалялись файлы размером более 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 1909743

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 1909770

Цитата:

Цитата Leem111
более 500 метров »

Цитата:

Цитата DmitriiV
objFile.Size > 512000 »

DmitriiV, нужно 524288000

DmitriiV 03-05-2012 15:12 1909861

Цитата:

Цитата El Sanchez
нужно 524288000 »

Для сути решения это совершенно неважно. Поэтому было оставлено значение, использованное в заготовке автора темы.


Время: 15:16.

Время: 15:16.
© OSzone.net 2001-