VBS文件长度循环

VBS file length loop

我有一个脚本来列出目录中的文件,包括它们的长度:

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set txtOut = objFSO.CreateTextFile("d:\FileNameLength.csv")
FoldersRec "d:\MyData"

Sub FoldersRec(Startfolder)
  Set objFolder = objFSO.GetFolder(Startfolder)
  Set colSubfolders = objFolder.Subfolders

  For Each objSubfolder In colSubfolders
    FoldersRec(objSubfolder)
  Next

  For Each file In objFolder.Files
    strZeile = file & ";" & Len(file)
    txtOut.WriteLine strZeile 
  Next
  ''MsgBox "Done"
End Sub

它工作正常。我想改变的是将它转换为一个显式循环,然后我可以添加一些东西,例如消息框。

如果我只是在 End Sub 之前输入 MsgBox "Done" 它会出现在每个文件中。

因此,想法是添加类似 loop while file existsloop while Len(file)>0 的内容。但是我不太确定语法。

为什么不这样:

Set txtOut = objFSO.CreateTextFile("d:\FileNameLength.csv")
FoldersRec "d:\MyData"
MsgBox "Done"

我会这样重写你的代码:

Set fso = CreateObject("Scripting.FileSystemObject")

ListSizes fso.GetFolder("D:\MyData"), fso.CreateTextFile("d:\FileNameLength.csv")
MsgBox "Done"

Sub ListSizes(folder, outStream)
  Dim subfolder, file

  For Each subfolder In folder.Subfolders
    ListSizes subfolder, outStream
  Next
  For Each file In folder.Files
    outStream.WriteLine file & ";" & file.Size
  Next
End Sub

这样您就可以将任何 Stream 对象传递给 ListSizes,例如控制台(当通过 cscript.exe 调用时):

ListSizes fso.GetFolder("D:\MyData"), WScript.StdOut

此外,我怀疑想要文件 .Size(以字节为单位),而不是文件路径的长度?

所以,这是我的问题的最佳解决方案:

Set fso = CreateObject("Scripting.FileSystemObject")

ListSizes fso.GetFolder("s:"), fso.CreateTextFile("r:\FileNameLength.csv")
MsgBox "Done"

Sub ListSizes(folder, outStream)
  Dim subfolder, file

  For Each subfolder In folder.Subfolders
   On Error Resume Next
   ListSizes subfolder, outStream
  Next

  For Each file In folder.Files
    outStream.WriteLine file & ";" & file.Size & ";" & len(file)
  Next      
End Sub

通过这个解决方案,我得到了文件名长度和文件大小。