我對VBScript還不太瞭解,所以我可能犯了一些我只是看不到的菜鳥錯誤。 我基本上試圖做的是通過vbscript獲取MS Office 2013客戶端許可證信息的解決方法。 它將許可證信息從Office文件夾中的ospp.vbs文件轉儲到txt文件中。VBScript - 除非Wscript.Sleep無法訪問文本文件,即使文件已經可用
這裏是我的劇本的刪節部分,那就說明這個問題:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = Wscript.CreateObject("WScript.Shell")
Dim IsThere
If objFSO.fileExists("C:\Program Files\Microsoft Office\Office15\OSPP.VBS") Then
isThere = True
objShell.Run "cmd /K cscript ""C:\Program Files\Microsoft Office\Office15\OSPP.VBS"" /dstatus > C:\temp\tmpOutput.txt & exit"
ElseIf objFSO.fileExists("C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS") Then
isThere = True
objShell.Run "cmd /K cscript ""C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS"" /dstatus > C:\temp\tmpOutput.txt & exit"
End If
' wait for ospp.vbs zu finish and create the temporary txt file with license information
Do While Not objFSO.fileExists("C:\temp\tmpOutput.txt")
Wscript.Sleep 10
Loop
If isThere = True AND objFSO.fileExists("C:\temp\tmpOutput.txt") Then
'Wscript.Sleep 4000
Dim listFile
listFile = objFSO.OpenTextFile("C:\temp\tmpOutput.txt").ReadAll
Wscript.Echo listFile
End If
' Delete temporary data file
If objFSO.fileExists("C:\temp\tmpOutput.txt") Then
objFSO.deleteFile "C:\temp\tmpOutput.txt"
End If
像這樣運行它引發錯誤輸入過去文件(800A003E)的末尾行:
listFile = objFSO.OpenTextFile("C:\temp\tmpOutput.txt").ReadAll
如果我取消註釋Wscript.Sleep 4000,它工作正常,並顯示預期的結果。 即使我在Do-Loop中等待文件真正存在,它爲什麼會拋出錯誤?
OSPP.VBS輸出將立即創建,但只有在進程終止時纔會關閉,文件存在本身並不意味着裏面有東西(或者它可用於讀取)。 –