我正在寻找一种监视文件夹的方法,以便它在命中10个文件后执行批处理文件。如果它使用vbscript或任何其他类型的解决方案,那将会很酷。
任何帮助将不胜感激
感谢
答案 0 :(得分:4)
请参阅此问题:batch file to monitor additions to download folder
注意Nick's final solution他计算文件的位置。
我建议任何类似的测试都通过Task Scheduler执行。
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
答案 1 :(得分:0)
此等效的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任务计划程序每小时运行一次脚本,如果需要那么长时间才能显示足够的文件。