Войти

Показать полную графическую версию : [решено] Скрипт для удаления старых файлов и папок из определенной папки


Страниц : 1 2 [3] 4

Денис_Пузатков@vk
20-10-2012, 08:22
Папка называется Obmen,в ней есть две папки, сканер и договора. Надо чтобы две этих папки были не затронуты,а все остальное скрипт удалял,файлы которые лежат в корне,а так же остальные папки с подкаталогами. т.е. применял рекурсию.

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

Iska
20-10-2012, 11:23
Папка называется Obmen, »
Тогда зачем Вы пишете, что вызываете скрипт с параметром «D:\test»:
Запускается скрипт bat файлом со следующим содержанием cscript //Nologo MyCleanUp.VBS 1 D:\test >MyCleanupScript.Log »
?! Это только вводит в заблуждение. Почему сразу не написали, как Вы его вызываете с реальным параметром?

в ней есть две папки, сканер и договора »
Значит указываете их имена:
Case "сканер", "договора"
или как они у Вас там на самом деле называются.

Денис_Пузатков@vk
22-10-2012, 19:41
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 "Сканер", "Сертификаты"
Case Else
DelOld oI.Path, iDays
IF oI.Size = 0 Then
oI.Delete
End If
End Select
Next
End Function
не подскажете в чем дело,в таком виде скрипт не отрабатывает,из целевого католога удаляются файлы,но папки остаются...

Iska
22-10-2012, 20:48
не подскажете в чем дело… »
А Вы прислушаетесь к моей просьбе (http://forum.oszone.net/post-2008886.html#post2008886) насчёт оформления кода тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code)?

Денис_Пузатков@vk
22-10-2012, 21:03
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 "Сканер", "Сертификаты"
Case Else
DelOld oI.Path, iDays
IF oI.Size = 0 Then
oI.Delete
End If
End Select
Next
End Function

Iska
23-10-2012, 00:15
Угум.

Начните с того, что удалите или закомментируйте строку:
On Error Resume Next
посмотрите, что получится.

Денис_Пузатков@vk
23-10-2012, 06:45
Ничего не изменилось,так же удаляются только файлы...правда теперь если пробовать запустить сам скрипт,без bat. файла,стала появляться ошибка. Строка 2 символ 1 Индексы выходит за пределы допустимого диапазона.

Iska
23-10-2012, 10:27
Замечательно!

Теперь убираем второй «On Error Resume Next» из функции, добавляем требование обязательного предварительного объявления переменных «Option Explicit», добавляем объявления переменных, меняем «objFolder» на «oI», расставляем отступы для удобства чтения:
Option Explicit

Dim intDays
Dim strFldr
Dim objFSO

intDays = Int(Wscript.arguments.Item(0))
strFldr = Wscript.arguments.Item(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")

DelOld strFldr, intDays

Function DelOld(sFldr, iDays)
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 oI.Name
Case "Сканер", "Сертификаты"
Case Else
DelOld oI.Path, iDays

If oI.Size = 0 Then
oI.Delete
End If
End Select
Next
End Function
и снова пробуем.

Денис_Пузатков@vk
24-10-2012, 10:06
попробовал,файлы трет а папки в каталоге не удаляет....

Iska
24-10-2012, 13:30
а папки в каталоге не удаляет.... »
В этих не удалённых папках остаются какие-либо папки/файлы?

Денис_Пузатков@vk
24-10-2012, 22:39
Да остаются.

Iska
25-10-2012, 01:49
В этих не удалённых папках остаются какие-либо папки/файлы? »Да остаются. »
Потому папки и не удаляются.

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

Денис_Пузатков@vk
25-10-2012, 10:01
нет не старше....посмотрел внимательней,одна папка пустая есть

Iska
26-10-2012, 23:39
нет не старше....посмотрел внимательней,одна папка пустая есть »
Значит, пинайте автора скрипта ;).

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

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


'Производит поиск устаревших файлов и удаляет файлы старше 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

Iska
04-04-2013, 17:06
но не делает этого, выдает ошибку. »
Какую ошибку? Нажмите «Ctrl-C» в окне с сообщением об ошибке, затем вставьте полученный текст из буфера обмена сюда, обрамив его тэгом «code» (http://forum.oszone.net/misc.php?do=bbcode).

lipro122
16-04-2013, 13:15
Код:
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" , данные удалялись ... а сами папки нет ?

Iska
16-04-2013, 15:34
Чтобы не удалялись пустые папки, закомментируйте строку
If oI.Size = 0 Then oI.Delete

Чтобы папки "Папка1", "Папка2", "Папка3" попадали в обработку — уберите само условие «Select Case …».

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

lipro122
16-05-2013, 17:06
для файлов:
Код:

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\" ?

Iska
17-05-2013, 03:31
использование:
CScript MyScript.VBS 14 C:\TEST

Меня интересует если в названии папки присутствует пробел. »
Правильное использование:
cscript.exe //nologo "Путь\MyScript.VBS" "C:\TEST TEST TEST"

например C:\Program Files\ он правильно примет аргументы ?
Или нужно будет указать "C:\Program Files\" ? »
cscript.exe //nologo "Путь\MyScript.VBS" "C:\Program Files"

P.S. Лучше сразу заиметь привычку заключать пути в качестве аргументов скриптов WSH в кавычки, независимо от наличия в них пробелов. Привыкнете — станете делать сие автоматически.




© OSzone.net 2001-2012