我目前正在研究监视子文件夹的vbscript。但是现在,我希望脚本能够监视子文件夹中的文件夹。
例如:地图是'进口'。在导入文件夹中有几个文件夹(子文件夹)。在子文件夹中有更多的文件夹,这就是我想要监视的内容。
我希望能明白我的意思。
示例:http://gyazo.com/3f0b7a9d492361fef41fbbe9760a8da1
示例2:http://gyazo.com/284734da6b70d1b91ac7e3afc4e10918
这就是我现在所拥有的:
Option Explicit
Dim objExcel, strExcelPath, objSheet, fso, folder, colFolders, objFSO, objFile, objbook, objDoc, objShell, rs, f, s, EmailBody, EmailAttachments, objWorkbook, strFile, IntRow, objRange, x, objWorksheet,wbc, SaveChanges, objSubFolder, objFrigolanda, foldername, moddate,folders, Frigolanda
Const adVarChar = 200
Const adDate = 7
Const adBigInt = 20
'=====
'Set objecten
set fso = createobject("scripting.filesystemobject")
set folder = fso.getfolder("\\netko-sbs\data\imports\")
Set colFolders = folder.SubFolders
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("\\netko-sbs\data\Imports\output.txt", True)
'=====
' Check if file exists.
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (objFSO.FileExists(strFile) = True) Then
objFSO.DeleteFile(strFile)
End If
'=====
'create a custom disconnected recordset
'with fields for filename, last modified date, and size.
'=====
set rs = createobject("ador.recordset")
rs.fields.append "foldername",adVarChar,255
rs.fields.append "moddate",adDate
'rs.fields.append "filesize",adBigInt
'====
'Excel
'Set objWorksheet = objWorkbook.Worksheets(1)
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open _
("\\netko-sbs\Data\Imports\output.xlsx") 'Opslaan als..
objExcel.Visible = True 'toon excel
objExcel.DisplayAlerts = FALSE 'Foutmeldingen uitschakelen
objExcel.Cells(1, 1).Value = "foldernaam" 'cellen naam geven
objExcel.Cells(1, 2).Value = "Laatste import" 'cellen naam geven
x = 2 'set de juiste rij in excel
'=====
'opening without any connection info makes
'it "disconnected".
'=====
rs.open
'=====
'load it with file name, date, etc.
'=====
for each frigolanda in folder.SubFolders
if frigolanda = "frigolanda" then
set folderfrigo = fso.getfolder ("\\netko-sbs\data\imports\Frigolanda\")
set colFolders = folder.SubFolders
end if
next
For each
for each f in folder.SubFolders
rs.addnew array("foldername","moddate"), _
array(f.name,f.datelastmodified)
rs.update
next
s = "Sortering van Oud naar Nieuw:" & vbcrlf _
& "=============================" & vbcrlf
if not (rs.bof and rs.eof) then
rs.sort = "moddate asc"
rs.movefirst
do until rs.eof
s = s & rs("foldername") & ";" _
& rs("moddate") & vbcrlf
objExcel.Cells(x, 1).Value = _
rs.Fields("foldername").Value
objExcel.Cells(x, 2).Value = _
rs.Fields("moddate").Value
x = x + 1
rs.movenext
loop
end if
objFile.WriteLine s 'Schrijf waarden naar Excel
Set rs = nothing 'Gooi RS leeg
Set folder = nothing 'Object leegmaken
set fso = nothing 'Object leegmaken
Set objRange = objExcel.Range("A1") 'Selecteer actieve cell
objRange.Activate 'Activeer cell
Set objRange = objExcel.ActiveCell.EntireColumn
objRange.Autofit() 'Set grootte van kolom
Set objRange = objExcel.Range("B1") 'Selecteer actieve cell
objRange.Activate 'Activeer cell
Set objRange = objExcel.ActiveCell.EntireColumn
objRange.Autofit() 'Set grootte van kolom
ObjWorkbook.SaveAs "\\netko-sbs\Data\Imports\output.xlsx" 'Excel bestand opslaan
'objExcel.Quit 'Excel afsluiten als nodig is.
答案 0 :(得分:0)
创建文件或文件夹时,可以使用WMI和InstanceCreationEvent
类进行通知。 Here's a column from The Scripting Guy关于此主题。它讨论了如何通知正在创建的子文件夹,而不是文件,但想法是一样的。不幸的是,您只能监控单个文件夹,而不能监控文件夹层次结构。
因此,除了使用第三方工具之外,我能想到的唯一解决方案是迭代文件夹结构并将文件列表存储在字典中。然后,以某个间隔轮询文件夹以查看是否发生了任何更改。
例如:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")
' Initialize the file list...
DoFolder "\\netko-sbs\data\imports", True
' Now poll the folder every 10 seconds, looking for new files...
Do
WScript.Sleep 10000
DoFolder "\\netko-sbs\data\imports", False
Loop
' Recursive function...
Sub DoFolder(strFolder, bFirstTime)
' Add each file to our dictionary...
For Each objFile In objFSO.GetFolder(strFolder).Files
If bFirstTime Then
' Initializing. Just add every file we find...
d.Add objFile.Path, ""
Else
' Polling. Report any new files...
If Not d.Exists(objFile.Path) Then
' New file found! Do something with it.
End If
End If
Next
' Recursively check each subfolder...
For Each objFolder In objFSO.GetFolder(strFolder).SubFolders
DoFolder objFolder.Path
Next
End Sub
这会运行一次以构建文件夹层次结构中的文件列表。然后,您可以在一段时间后再次运行它以检查任何新文件。