Показать полную графическую версию : [решено] Скрипт для удаления старых файлов и папок из определенной папки
Денис_Пузатков@vk
20-10-2012, 08:22
Папка называется Obmen,в ней есть две папки, сканер и договора. Надо чтобы две этих папки были не затронуты,а все остальное скрипт удалял,файлы которые лежат в корне,а так же остальные папки с подкаталогами. т.е. применял рекурсию.
папка откуда надо удалять,задается bat файлом.в том варианте в котором у меня сейчас.
Папка называется 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
не подскажете в чем дело,в таком виде скрипт не отрабатывает,из целевого католога удаляются файлы,но папки остаются...
не подскажете в чем дело… »
А Вы прислушаетесь к моей просьбе (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
Угум.
Начните с того, что удалите или закомментируйте строку:
On Error Resume Next
посмотрите, что получится.
Денис_Пузатков@vk
23-10-2012, 06:45
Ничего не изменилось,так же удаляются только файлы...правда теперь если пробовать запустить сам скрипт,без bat. файла,стала появляться ошибка. Строка 2 символ 1 Индексы выходит за пределы допустимого диапазона.
Замечательно!
Теперь убираем второй «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
попробовал,файлы трет а папки в каталоге не удаляет....
а папки в каталоге не удаляет.... »
В этих не удалённых папках остаются какие-либо папки/файлы?
Денис_Пузатков@vk
24-10-2012, 22:39
Да остаются.
В этих не удалённых папках остаются какие-либо папки/файлы? »Да остаются. »
Потому папки и не удаляются.
А эти оставшиеся файлы — они действительно не старше указанного Вами при вызове скрипта числа дней?
Денис_Пузатков@vk
25-10-2012, 10:01
нет не старше....посмотрел внимательней,одна папка пустая есть
нет не старше....посмотрел внимательней,одна папка пустая есть »
Значит, пинайте автора скрипта ;).
У меня непонятка со скриптом. Он должен удалять файлы в сети в папках с русскими именами и с пробелами, но не делает этого, выдает ошибку. Говорят раньше он работал. Писал его не я, да и особо в этом не разбираюсь.
Собственно сам скрипт:
'Производит поиск устаревших файлов и удаляет файлы старше 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
но не делает этого, выдает ошибку. »
Какую ошибку? Нажмите «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" , данные удалялись ... а сами папки нет ?
Чтобы не удалялись пустые папки, закомментируйте строку
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\" ?
использование:
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.