vbscript - 有没有办法将 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
解决方案
您可以使用分隔符分隔的输出格式,例如:
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
StringBuilder
如this answer to another question中所述,使用对象也是一种选择。
推荐阅读
- python - 类方法中带有验证装饰器的 TypeError
- button - 初始化或渲染后Paypal智能按钮样式修改
- javascript - 如何 post props redux React
- google-cloud-platform - 将 GCP 中的磁盘映射到 Windows 中的操作系统磁盘
- vue.js - 我如何从子组件 vuejs 运行方法
- r - 在 R 中创建 GIF 时出现帧顺序问题(库:“magick”和“purrr”)
- angular - 当两级嵌套 cva 无效时,父表单无效
- vue.js - 如何使用事件@row-click 从 Quasar 表行中获取数据
- python - 如何从 SELECT SQL 查询中删除 NULL 值
- java - 我想打印 hi GrandFather;但它似乎打印 hi Father