用vbs讀取遠端電腦上的文字檔的代碼_vbs

來源:互聯網
上載者:User
問:
您好,指令碼專家!如何讀取遠端電腦上的文字檔?
-- BM
答:
您好,BM。我們得承認:我們在利用您和您的問題來達成我們自己的邪惡目的。本周早些時候我們回答了有關如何讀取一組文字檔最後一行的問題;在回答中,我們承諾將會說明如何使用 FileSystemObject 對遠端電腦執行同樣的功能。這並無惡意,只是為了維護本專欄的精神,除非有人提出有關對遠端電腦上的文字檔進行處理的問題,我們是不會做出回答的。於是我們選擇了您的問題。
因此,沒錯,我們在利用您。但如果往好處想,您的問題得到了回答。事實上,讓我們先來看一看您的問題。
如您所知,FileSystemObject(用於讀寫文字檔的對象)的原本用於本地;而事實上,您讀過的有關 FileSystemObject 的任何材料差不多都會煞費苦心地指出,不能對遠端電腦使用該對象。儘管事實並非完全如此:那是因為 FileSystemObject 可以使用 UNC 路徑。假定要讀取的檔案位於檔案分享權限設定目錄中 (\\atl-fs-01\public\myfile.txt)。在這種情況下,開啟和讀取文字檔就像下面的代碼那樣簡單:
複製代碼 代碼如下:

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$)。即使尚未共用資料夾 C:\Public,以下指令碼也能夠讀取檔案 MyFile.txt:
複製代碼 代碼如下:

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 和寫入程式碼:
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 表示感謝,感謝您讓我們利用您的問題。我們欠您一個人情!
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.