用vbs读取远程计算机上的文本文件的代码

2019-01-16 10:16:29王冬梅

如果不使用管理共享,那多半没什么办法。(除非您真的要做出某些疯狂的举动,如使用 WSHController 对象。但那就要另当别论了。)
而这便引出了我们的不可告人目的:如何遍历远程文件夹中的所有文件并使用 FileSystemObject 打开和读取其中的每个文件?嗯,请看下面这种方法:

Const ForReading = 1 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
strComputer = "atl-fs-01" 
Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2") 
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-01C$LogsMyFile.log
为构建该路径,我们会各使用一些 WMI 和硬编码:
strFilePath = "" & strComputer & "C$Logs" & _
    objFile.FileName & "." & objFile.Extension
我们要做的是:
• 以一对  开头: 
• 添加计算机名称:atl-fs-01
• 添加一个  和管理共享路径 C$Logs:atl-fs-01C$Logs
• 添加 WMI FileName 属性(只含文件名部分,不含文件扩展名):atl-fs-01C$LogsMyFile
• 在文件名和文件扩展名之间添加句点(因为句点不是 WMI Extension 属性的一部分):atl-fs-01C$LogsMyFile.
• 添加 WMI 属性 Extension:atl-fs-01C$LogsMyFile.log
这稍显复杂,但它构建了我们需要的 UNC 路径。而且,每次完成循环时它都会替换新的文件名和新的文件扩展名(计算机名称和文件夹路径从不改变)。于是,我们最终能够打开(并读取)远程文件夹中的每个文件。