Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("\\atl-fs-01\public\myfile.txt", ForReading)
strContents = objTextFile.ReadAll
objTextFile.Close
Wscript.Echo strContents
如您所見,我們開始先定義一個叫做 ForReading 的常數,並將值設為 1。跟著建立 FileSystemObject 參考,並呼叫 OpenTextFile 方法,來傳遞兩個參數:即剛剛提到的檔案的 UNC 路徑,還有 ForReading 常數。此時我們可以任意處置這個檔案:為了給您一個使用文字檔的例子,我們呼叫 ReadAll 方法將檔案的整個內容讀入一個叫做 strContents 的變數。接著我們關閉該檔案,回應 strContents 的值,就這樣。
只要所提的檔案是位於共用資料夾中,一切都不會有問題。但要是檔案不是在共用資料夾中呢?要是這樣,您唯一的資源就是使用系統管理共用 (像 C$)。這個指令碼會讀取 MyFile.txt 檔案,即使 C:\Public 資料夾未共用也一樣:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("\\atl-fs-01\C$\public\myfile.txt", ForReading)
strContents = objTextFile.ReadAll
objTextFile.Close
Wscript.Echo strContents
假如您沒有使用系統管理共用,那麼可能就沒輒了 (除非您豁出去,使用 WSHController 物件,不過今天先不討論)。
這讓我們想到接下來的意圖:我們要如何循環處理遠端資料夾中的所有檔案,然後使用 FileSystemObject 來開啟和讀取每個檔案呢?這是其中一個方法:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
strComputer = "atl-fs-01"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\Logs'} Where " _
& "ResultClass = CIM_DataFile")
For Each objFile In colFileList
strFilePath = "\\" & strComputer & "\C$\Logs\" & _
objFile.FileName & "." & objFile.Extension
Set objTextFile = objFSO.OpenTextFile(strFilePath, ForReading)
strContents = objTextFile.ReadAll
Wscript.Echo strContents
objTextFile.Close
Next
我們在這邊所做的,是連接到 atl-fs-01 遠端電腦,並擷取 C:\Logs 資料夾中所有檔案的集合。耍技巧的地方是在建構每個檔案的路徑,因為我們必須使用類似下面的系統管理共用路徑:
\\atl-fs-01\C$\Logs\MyFile.log
為了建構路徑,我們用點 WMI並寫死系統管理共用路徑C$\Logs\:
strFilePath = "\\" & strComputer & "\C$\Logs\" & _
objFile.FileName & "." & objFile.Extension
我們所做的是:
- 以兩個 \ 為開頭- \\
- 加入電腦的名稱:\\atl-fs-01
- 加入一個 \ 和系統管理共用路徑 C$\Logs\:\\atl-fs-01\C$\Logs\
- 加入 WMI FileName 屬性 (這只是名稱,減去副檔名):\\atl-fs-01\C$\Logs\MyFile
- 在檔名和副檔名之間加入英文句號 (因為句號不是 WMI Extension 屬性的一部分):\\atl-fs-01\C$\Logs\MyFile.
- 加入 WMI 的屬性 Extension:\\atl-fs-01\C$\Logs\MyFile.log
這有點複雜,不過會建置我們所需的 UNC 路徑。另外,每次跑迴圈,它都會取代新檔名和新的副檔名 (電腦名稱和資料夾路徑永遠不會變)。因此我們最後就能開啟 (並讀取) 遠端資料夾中的每個檔案了。
順帶一提,感謝您讓我們利用您的問題,BM。我們欠您一次人情! |