0

我试图在一天结束时将所有订单文件复制到一个文件中。这是我的代码。有人可以纠正错误。cFol 当我输入目录的完整名称时,错误就在C:\Customers\ABF\Orders我没有收到任何错误的情况下。但是当我给cFol我时,我得到了一个错误0x80041002

showfolderlist "c:\Customers"

Sub ShowFolderList(folderspec)
  Dim fs, f, f1, fc, s
  s = ""
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set f = fs.GetFolder(folderspec)
  Set fc = f.SubFolders
  For Each f1 in fc
    s = f1.name
    Msgbox s
    Const ForReading = 1
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objOutputFile = objFSO.CreateTextFile("C:\New\output.txt")
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    cFol = "C:\Customers\" & s & "\Orders"
    msgbox cFol
    Set FileList = objWMIService.ExecQuery _
      ("ASSOCIATORS OF {Win32_Directory.Name='cFol'} Where " _
      & "ResultClass = CIM_DataFile")
    For Each objFile In FileList
      Set objTextFile = objFSO.OpenTextFile(objFile.Name, ForReading) 
      strText = objTextFile.ReadAll
      objTextFile.Close
      objOutputFile.WriteLine strText
    Next
    objOutputFile.Close
    s=""
  Next
End Sub

错误发生在这一行:

Set FileList = objWMIService.ExecQuery _
  ("ASSOCIATORS OF {Win32_Directory.Name='cFol'} Where " _
  & "ResultClass = CIM_DataFile")
4

1 回答 1

2

VBScript 不会在字符串中扩展变量名,因此您的 WMI 查询正在寻找一个名为 的目录,但该目录cFol不存在。此外,您可能需要转义路径中的反斜杠。替换这个:

Set FileList = objWMIService.ExecQuery _
  ("ASSOCIATORS OF {Win32_Directory.Name='cFol'} Where " _
  & "ResultClass = CIM_DataFile")

有了这个:

Set FileList = objWMIService.ExecQuery _
  ("ASSOCIATORS OF {Win32_Directory.Name=""" & Replace(cFol, "\", "\\") _
  & """} Where ResultClass = CIM_DataFile")

并且错误应该消失。

作为安全预防措施,我还用双引号替换了单引号。虽然单引号是 WMI 中的有效字符串分隔符,但它们也是文件和文件夹名称中的有效字符,因此当您的路径包含单引号时可能会遇到问题。使用双引号可以避免这个问题,因为它们不是文件和文件夹名称的有效字符。

于 2013-07-10T19:57:41.653 回答