2013-07-10 52 views
0

我想在一天結束時將所有訂單文件複製到一個文件中。這是我的code.Can有人請糾正錯誤。錯誤是在cFol 當我鍵入目錄的完整名稱,如C:\Customers\ABF\Orders我沒有得到任何錯誤。但是,當我給cFol我得到一個錯誤0x80041002有人可以糾正vbscript錯誤

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") 
+1

*哪個*錯誤?代碼中的哪一行? –

+0

{Win32_Directory.Name ='cFol'} –

+0

錯誤是0x80041002 –

回答

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中的有效字符串分隔符,但它們在文件和文件夾名稱中都是有效的字符,因此當您的路徑包含單引號時可能會遇到問題。使用雙引號避免了這個問題,因爲它們不是文件和文件夾名稱的有效字符。

+0

感謝百萬。像魅力! –

+1

不客氣。但是,請避免發佈「謝謝」意見。在SO上表達感謝的正確方式是upvote和/或[接受](http://meta.stackexchange.com/a/5235)答案。 –