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 exists
或 loop 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
通过这个解决方案,我得到了文件名长度和文件大小。
我有一个脚本来列出目录中的文件,包括它们的长度:
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 exists
或 loop 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
通过这个解决方案,我得到了文件名长度和文件大小。