首页 > 解决方案 > 有没有办法将 WriteLine 输出组织到文本文件中的列中?

问题描述

有没有办法将文本文件中的 WriteLine 数据输出分成列(例如:)Date | Location | Size

我还没有在网上任何地方看到任何关于此的信息,不确定是否可能,因为正在写入的数据不是静态的。我需要一个完全不同的函数来让脚本处理文本文件的格式吗?

Option Explicit
Dim sDirectoryPath,Search_Days,r_nr,iDaysOld,CmdArg_Object,lastModDate
Dim oFSO,oFolder,oFileCollection,oFile,oTF,Inp, SubFolder,fullpath
Set CmdArg_Object = Wscript.Arguments

Select Case (CmdArg_Object.Count)
    Case 3
        sDirectoryPath = CmdArg_Object.item(0)
        Search_Days = CmdArg_Object.item(1)
        r_nr = CmdArg_Object.item(2)
    Case Else
        WScript.Echo "SearchFiles.vbs requires 3 parameters:" & _
            vbCrLf & "1) Folder Path" & _
            vbCrLf & "2) # Days to Search" & _
            vbCrLf & "3) Recursive option (r/nr)"
        WScript.Quit
End Select

Set oFSO = CreateObject("Scripting.FileSystemObject")
iDaysOld=Date+(-1*Search_Days)
Inp = InputBox("Please Enter Desired Location of Log File:")
If Inp= "" Then
    Set oTF = oFSO.CreateTextFile("C:\output.txt")
Else
    Set oTF = oFSO.CreateTextFile(oFSO.BuildPath(Inp, "output.txt"))
End If
Set oFolder = oFSO.GetFolder(sDirectoryPath)
Set oFileCollection = oFolder.Files

WScript.Echo Now & " - Beginning " & Search_Days & " day search of " & sDirectoryPath

If r_nr = "r" Then
    oTF.WriteLine ("Search Parameters-") & _
        vbCrLf & "DirectoryPath: " & sDirectoryPath & _
        vbCrLf & "Older than: " & Search_Days &" Days " & _
        vbCrLf & "Recursive/Non-Recursive: " & r_nr & _
        vbCrLf & "------------------ "
    TraverseFolders oFSO.GetFolder(sDirectoryPath)

    Function TraverseFolders (FolderName)
        For Each SubFolder In FolderName.SubFolders
            For Each oFile In SubFolder.Files
                lastModDate = oFile.DateLastModified
                If (lastModDate <= iDaysOld) Then
                    oTF.WriteLine (oFile.DateLastModified) & " " & oFile.Path
                End If
            Next
            TraverseFolders(Subfolder)
        Next
    End Function
Else
    oTF.WriteLine ("Search Parameters:") & _
        vbCrLf & "DirectoryPath: " & sDirectoryPath & _
        vbCrLf & "Older than: " & Search_Days &" Days " & _
        vbCrLf & "Recursive/Non-Recursive: " & r_nr & _
        vbCrLf & "------------------------- "
    For Each oFile In oFileCollection
        lastModDate = oFile.DateLastModified
        If (lastModDate <= iDaysOld) Then
            oTF.WriteLine (oFile.DateLastModified) & " " & oFile.Path
        End If
    Next
End If

If Inp = "" Then
    WScript.Echo "Now - Finished! Results Placed in: C:\output.txt"
Else
    WScript.Echo "Now - Finished! Results Placed in: " & Inp
End If

标签: vbscript

解决方案


您可以使用分隔符分隔的输出格式,例如:

Delim = vbTab
oTF.WriteLine "DateLastModified" & Delim & "Size" & Delim & "Path"
...
For Each oFile in oFileCollection
    oTF.WriteLine oFile.DateLastModified & Delim & oFile.Size & Delim & oFile.Path
Next

使用选项卡和精心选择的字段顺序的优点是编辑器将在(大部分)适当的列中显示内容,可以将其作为 CSV 导入其他程序中。

如果您的目标是固定宽度格式,您需要自己填充数据,例如使用自定义填充功能,例如

Function LPad(s, l)
    n = 0
    If l > Len(s) Then n = l - Len(s)
    LPad = String(n, " ") & s
End Function

StringBuilderthis answer to another question中所述,使用对象也是一种选择。


推荐阅读