0

我正在尝试使用 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 指定路径的方式是否有效。但我现在主要关心的是让查询返回我想要的文件。

谢谢你的帮助!

4

1 回答 1

2

你这里有几个问题。

  1. 如果要选择文件,请使用CIM_DataFile类。Win32_Directory你猜对了,是目录。

  2. 属性中的反斜杠Path必须转义 ( \\)。

  3. strDrivePath是一个变量,但您在 WMI 查询中按字面意思使用它。

  4. 你打算在远程机器上运行这个脚本吗?如果没有,为什么不使用这些FileSystemObject方法?您已经创建了一个 FSO 对象。

是我过去回答的一个类似问题,展示了如何使用 FileSystemObject 或 WMI 查询来查找符合规范的文件。

在这种情况下,您的查询可能如下所示:

strFileSpec = "C:\\Users\\Adam\\Documents\\Test\\%.csv"

Set colCSV = objWMIService.ExecQuery _
 ("select * from CIM_DataFile where Name like '" & strFileSpec & "'")

但是,如果您在语句中为Driveand指定值,您的查询将运行得更快(通常很明显) 。Path有关示例,请参阅我的链接帖子。

编辑:我刚刚意识到您也是我所链接问题的 OP!

于 2014-08-19T00:19:26.850 回答