копировать файлы между указанным диапазоном дат - PullRequest
0 голосов
/ 05 июля 2011

Я хочу скопировать файлы из одной папки в другую, которая попадает между определенным диапазоном дат, используя VBS.

например, я хочу скопировать файлы с 06/11/2009 по 06/12/2010.Как я могу сделать это в сценарии VB.

Ответы [ 2 ]

1 голос
/ 05 июля 2011

WMI вариант?Если это так, вот пример сценария, основанный на сценарии из Эй, сценарист! article Как удалить все файлы старше указанной даты? :

strComputer = "." 

strFolder = "C:\FromFolder"
strNewFolder = "C:\ToFolder"

strDateFrom = "20090611000000.000000+00" ' 06/11/2009
strDateTo   = "20100612000000.000000+00" ' 06/12/2010


Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colFiles = oWMI.ExecQuery _ 
    ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolder & "'} WHERE " _ 
        & "ResultClass = CIM_DataFile")

For Each oFile in colFiles
    If oFile.CreationDate > strDateFrom And oFile.CreationDate < strDateTo Then
        'WScript.Echo "Full path:     " & oFile.Name
        'WScript.Echo "Creation date: " & oFile.CreationDate

        oFile.Copy strNewFolder & "\" & oFile.FileName & "." & oFile.Extension
        oFile.Delete
    End If
Next

Вот немного другой вариант, в котором проверки даты включены в запрос WMI:

strComputer = "."
strDateFrom = "20090611000000.000000+00" ' 06/11/2009
strDateTo   = "20100612000000.000000+00" ' 06/12/2010
strNewFolder = "C:\ToFolder"
iFlags = 48

Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colFiles = oWMI.ExecQuery( _
    "SELECT * FROM CIM_DataFile" & _
    " WHERE Drive = 'C:' AND Path = '\\FromFolder\\'" & _
    " AND CreationDate >= '" & strDateFrom & "'" & _
    " AND CreationDate <= '" & strDateTo & "'" _
    ,,iFlags)

For Each oFile in colFiles
    'WScript.Echo "Full path:     " & oFile.Name
    'WScript.Echo "Creation date: " & oFile.CreationDate

    oFile.Copy strNewFolder & "\" & oFile.FileName & "." & oFile.Extension
    oFile.Delete
Next

Несколько замечаний:

  • Сценарий не рекурсивный, то естьон перемещает файлы только из самой исходной папки, а не из ее подпапок.
  • Даты указываются в формате UTC.Подробнее об этом формате можно прочитать в статье, на которую я ссылаюсь.
  • WMI не содержит методов перемещения файлов и папок, поэтому сценарий копирует и удаляет файлы.
0 голосов
/ 05 июля 2011

Вы можете использовать FileSystemObject.Следующая дата получит дату создания файла:

   Dim fso, myfile, d
   Set fso = CreateObject("Scripting.FileSystemObject")

   Set myfile = fso.GetFile("something.dat")
   d = myfile.DateCreated
   MsgBox d

Подробнее здесь .

Здесь - это пример того, как циклически перебирать файлы в данной папке.Для каждого файла вы можете проверить дату, решить, нравится ли вам она, и если да, то скопировать файл .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...