我正在尝试使用VBScript选择特定文件夹中的所有csv,然后将它们连接成一个。我正在使用Win32_Directory上的ExecQuery将所有csv添加到集合中,指定路径和扩展属性。我在要测试的文件夹中有五个csv。但是返回的集合总是为空。
这是我的代码:
strComputer = "."
Set wshShell = WScript.CreateObject( "WScript.Shell" )
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Options for CreateTextFile
boolOverwrite = True
boolUnicode = True
'Options for OpenTextFile
constForReading = 1
constForWriting = 2
constForAppending = 8
boolCreate = False
constTristate = -1
strPath = "C:\Users\adam\Documents\Test\Temp.csv"
strDrivePath = "C:\Users\adam\Documents\Test"
'Creates object reference to files in relevant folder.
Set objFSO = CreateObject ("Scripting.FileSystemObject")
'Creates new CSV to write others' contents to.
Set objNew = objFSO.CreateTextFile(strPath,boolOverwrite,boolUnicode)
Set colCSV = objWMIService.ExecQuery _
("SELECT * FROM Win32_Directory WHERE Path = strDrivePath AND Extension = 'csv'")
'Concatenates contents of CSVs
For Each objCSV in colCSV
Set objTemp = objFSO.OpenTextFile(objCSV.Path & objCSV.FileName & objCSV.Extension,constForReading,boolCreate,constTristate)
Set strLine = objTemp.ReadLine
objNew.Write strLine
Next
我也不确定我为OpenTextFile指定路径的方式是否有效。但我现在主要担心的是让查询返回我想要的文件。
感谢您的帮助!
答案 0 :(得分:1)
你在这里遇到了一些问题。
如果要选择文件,请使用CIM_DataFile
类。你猜对了Win32_Directory
目录。
Path
属性中的反斜杠必须转义(\\
)。
strDrivePath
是一个变量,但您在WMI查询中确实使用它。
您打算在远程计算机上运行此脚本吗?如果没有,为什么不使用FileSystemObject
方法?您已经创建了FSO对象。
Here是我过去回答的类似问题,展示了如何使用FileSystemObject或WMI查询来查找符合规范的文件。
在这种情况下,您的查询可能如下所示:
strFileSpec = "C:\\Users\\Adam\\Documents\\Test\\%.csv"
Set colCSV = objWMIService.ExecQuery _
("select * from CIM_DataFile where Name like '" & strFileSpec & "'")
但是,如果在语句中指定Drive
和Path
的值,则查询运行速度会更快(通常会显着)。有关示例,请参阅我的链接帖子。
编辑:我刚刚意识到你是我所链接的问题的OP!