Нужно ли использовать WMI для объединения текстовых файлов в VBScript? - PullRequest
1 голос
/ 18 июня 2019

при поиске подсказок о слиянии текстовых файлов в VBScript я наткнулся на этот пример: https://gallery.technet.microsoft.com/scriptcenter/Merge-multiple-txt-files-cbe9625c

Const ForReading = 1 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objOutputFile = objFSO.CreateTextFile("output.txt") 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 

Set FileList = objWMIService.ExecQuery _ 
    ("ASSOCIATORS OF {Win32_Directory.Name='z:\Scripts\Test'} 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

Инструкции таковы:

Вы можете объединить несколько текстовых файлов из определенной папки в один текстовый файл. Он объединит все данные в один текстовый файл. Вам не нужно копировать данные вручную. Вы можете выполнить этот скрипт напрямую или из командной строки. В этом скрипте вам нужно изменить путь к папке z: \ Scripts \ Test к существующему пути, где доступны все текстовые файлы, а также измените имя «output.txt» на имя требуемого файла вывода и путь.

Хотя я довольно новичок в VBScript (и не писал VBScript в течение очень очень долгого времени), я не понимаю смысла использовать этот сервис WMI для такой простой задачи ( т.е. обработка файлов в одной папке).

Разве не достаточно просто использовать folder.Files, а затем фильтровать файлы в соответствии с вашими требованиями?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 18 июня 2019

Вы абсолютно правы, глупо использовать WMI для этой задачи.

Это будет хорошо, и будет намного быстрее:

Option Explicit

Dim FSO, OutputFile, File

Set FSO = CreateObject("Scripting.FileSystemObject")
Set OutputFile = FSO.CreateTextFile("output.txt")

For Each File In FSO.GetFolder("Z:\Scripts\Test").Files
    If LCase(FSO.GetExtensionName(File.Name)) = "txt" Then
        With FSO.OpenTextFile(File.Path)
            OutputFile.WriteLine .ReadAll
            .Close
        End With
    End If
Next

OutputFile.Close
...