1

Тема: VBS: обход папок с выводом сообщения о новых файлах

Всем привет.
Такая задача: есть каталог с подкаталогами, вложенностью до 10, нужно сделать обход по всем каталогам-подкаталогам с выводом списка новых/изменившихся файлов или выводом ярлыков этих файлов в папку на рабочем столе.
Спасибо.

2 (изменено: dab00, 2011-08-22 14:36:43)

Re: VBS: обход папок с выводом сообщения о новых файлах

Jango пишет:

Всем привет.
Такая задача:

Курите FileSystemObject.
Таким образом:

Set fso = CreateObject("Scripting.FileSystemObject")
startFolder = "Z:\temp\" ' Ваш каталог
OlderThanDate = DateAdd("d", -7, Date) ' дата, старше которой необходимо удалять
If fso.FolderExists (startFolder) Then DeleteOldFiles startFolder, OlderThanDate
 
Function DeleteOldFiles(folderName, BeforeDate)
    Dim folder, file, fileCollection, folderCollection, subFolder    
    Set folder = fso.GetFolder(folderName)
    Set fileCollection = folder.Files
    For Each file In fileCollection
        If file.DateLastModified < BeforeDate Then
            fso.DeleteFile file.Path, True
        End If
    Next 
    Set folderCollection = folder.SubFolders
    For Each subFolder In folderCollection
       DeleteOldFiles subFolder.Path, BeforeDate
       If subFolder.Size = 0 Then subFolder.Delete True
    Next
End Function

удалял файлы старше 7 дней из темпового каталога на серваке.
Отсюда можно слепить решение Вашей задачи.

3 (изменено: Jango, 2011-08-30 15:46:48)

Re: VBS: обход папок с выводом сообщения о новых файлах

Собрал скрипт, создающий ярлыки на изменившиеся файлы за сутки:

Dim strFolder, dstFolder, File, objFSO, objFolder, WSHShell
  
 strFolder = "S:\sheff"
 dstFolder = "C:\newfiles"
  
 Set objFSO = CreateObject("Scripting.FileSystemObject")
 Set WSHShell = WScript.CreateObject("WScript.Shell")
 Set objFolder = objFSO.GetFolder(strFolder) 
 Set colFiles = objFolder.Files 
 For Each objFile In colFiles 
   File = objFile.ShortName 
   Doit File 
 Next 
  
 ShowSubFolders(objFolder) 
 Sub ShowSubFolders(objFolder) 
   Set colFolders = objFolder.SubFolders 
   For Each objSubFolder In colFolders 
        Set colFiles = objSubFolder.Files 
     For Each objFile In colFiles 
         File = objFile.ShortName 
             Doit File 
     Next 
    ShowSubFolders(objSubFolder) 
   Next 
 End Sub 
  
 Function Doit(File)
     If (Now - objFile.DateLastModified) < 2 Then
              Set MyShortcut = WSHShell.CreateShortcut(dstFolder & "\" & File & ".lnk")
              MyShortcut.TargetPath = objFile
              MyShortcut.WorkingDirectory = objFolder
              MyShortcut.WindowStyle = 4
              MyShortcut.Save
     End If
 End Function

но
он выдает ошибку после всех действий и имена ярлыков получаются кракозябрами

UPD: с ошибкой разобрался, теперь нужно разобраться с именем ярлыка, как-то иначе получать имя файла в File здесь Set MyShortcut = WSHShell.CreateShortcut(dstFolder & "\" & File & ".lnk")

4

Re: VBS: обход папок с выводом сообщения о новых файлах

Jango, зачем «.ShortName»?

5

Re: VBS: обход папок с выводом сообщения о новых файлах

alexii пишет:

Jango, зачем «.ShortName»?

Ага, это я уже понял и поменял на просто .Name

6

Re: VBS: обход папок с выводом сообщения о новых файлах

Как бы теперь прикрутить проверку с последнего запуска скрипта...

7

Re: VBS: обход папок с выводом сообщения о новых файлах

Jango пишет:

Как бы теперь прикрутить проверку с последнего запуска скрипта...

Поясните.

8

Re: VBS: обход папок с выводом сообщения о новых файлах

Что-то вроде: проверил скрипт папки и записал куда-нибудь список файлов с датами изменения, потом на следующий запуск сверился с этим списком и сообщил, были ли изменения.

9

Re: VBS: обход папок с выводом сообщения о новых файлах

Создавайте флаговый файл и ищите файлы, время создания/модификации которых позднее даты создания флагового файла.

( 2 * b ) || ! ( 2 * b )

10

Re: VBS: обход папок с выводом сообщения о новых файлах

создаю файл

 Set signalFile = objFSO.CreateTextFile("C:\newfiles\sf.txt")

но потом при проверке выдаёт что не поддерживается DateLastModified

11

Re: VBS: обход папок с выводом сообщения о новых файлах

Jango, приведите код создания и проверки. И что значит:

при проверке выдаёт что не поддерживается DateLastModified

Если это ошибка, то: #4.12.