Ищете способ выполнить командный файл, когда папка достигнет 10 файлов - PullRequest
0 голосов
/ 24 ноября 2010

Я ищу способ отслеживания папки, чтобы он выполнял командный файл, как только он достигнет 10 файлов.Было бы здорово, если бы он использовал vbscript или любой другой тип решения.

любая помощь будет оценена

спасибо

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

См. Этот вопрос: командный файл для отслеживания дополнений в папке загрузки

Примечание Окончательное решение Ника , где он считает файлы.

Я бы порекомендовал, чтобы любой такой тест выполнялся через планировщик задач.

Простой пример

rem Counting files...
set /a count = 0
for /f "tokens=*" %%P IN ('dir "C:\examplefolder" /A /b') do (set /a count += 1)

rem 10 or more files?
if %count% GEQ 10 call AnotherBatchFileHere.bat
0 голосов
/ 16 мая 2012

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

Цикл по коллекции папок .Files позволит вам проверить даты, размер и т. Д. Каждого файла в отдельности. Поскольку это набор файловых объектов, любой метод файлового объекта может быть выполнен напрямую или файловый объект может быть передан подпрограмме для обработки. Аналогичная коллекция .Subfolders перечисляет папки, созданные в этой папке, как объекты папок на случай, если вы также захотите отслеживать эту ситуацию.

Методы файла включают в себя .Copy .Move .Delete .OpenAsTextStream и свойства файла .DateLastModified .DateLastAccessed .Attributes и .Name являются обновляемыми.

Обратите внимание, что свойство .Name включает расширение файла, и если вы измените имя, вам может потребоваться вызвать FSO.GetExtensionName (), чтобы получить это расширение и добавить его к новому имени, прежде чем назначить его обратно свойству.

Коллекция Subfolders также имеет метод .Add (), который может создать новую дочернюю папку

.SubFolders.Add("NewFolderName")

и вместо метода .OpenAsTextStream файлового объекта у объектов папки есть метод .CreateTextFile (), который возвращает объект открытого текстового потока в новый текстовый файл, созданный в этой папке. Умное использование может заключаться в создании текстового потока, используемого вашими подпрограммами для записи ваших действий по обработке файлов в файл журнала. Или прочитайте текстовый файл напрямую и обработайте его содержимое.

Базовый пример скрипта для просмотра 10 файлов в папке

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")

WatchFolder FSO.GetFolder("c:\watched")

WScript.Quit

Sub WatchFolder(oFldr)
    While True
        If oFldr.Files.Count >= 10 Then
            WScript.Echo oFldr.Files.Count , "files in" , ofldr.Path , _
                         "Last Modified" , oFldr.DateLastModified

            For Each oFile In oFldr.Files
                WScript.Echo "File" , oFile.Name , _
                             "Last Modified" , oFile.DateLastModified , _
                             "Created" , oFile.DateCreated , _
                             "Size" , oFile.Size
                ' call subroutine to optionally process file
                KillJunkFile oFile
            Next
            Exit Function 
        End If 
        WScript.Sleep 2000  ' wait 2 seconds before checking again.
    Wend
End Sub 
Sub KillJunkFile(oTestFile)
    ' delete any file named junk.txt
    If LCase(oTestFile.Name) = "junk.txt" Then 
        oTestFile.Delete True  ' true forces the delete
    End If
End Sub

Обратите внимание, что функция WatchFolder () будет зацикливаться до тех пор, пока в просматриваемой папке не будет хотя бы 10 файлов. Вы должны убить задачу, чтобы иначе остановить ее, или добавить некоторую логику завершения, которая проверяет что-то в вашей системе и может сказать, что она должна выйти из цикла. Что-то вроде специально названного файла, записи в реестре, переменной среды и т. Д. Вы также можете закомментировать ключевые слова цикла While Wend и заставить планировщик задач Windows запускать сценарий каждый час, если для появления файлов достаточно много времени.

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