我正在尝试对文件夹的文件进行排序,并按特定顺序对它们执行操作(例如,按名称或修改日期) 我尝试了以下方法:
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(source_folder.Path)
Set colFiles = objFolder.Files
Set outputLines = CreateObject("System.Collections.ArrayList")
For Each objFile in colFiles
outputLines.Add(objFile.Name)
next
outputLines.Sort()
For Each outputLine in outputLines
set objFile = colFiles.item (outputLine&"")
*rest of the code*
问题是如果文件的文件名包含一个ASCII值小于“。”的字符,例如,“test!.exe”将在“test.exe”之前,这是不好的对我来说。
我有一个想法,创建一个包含“扩展名”和“没有扩展名的文件名”作为字段的类,并按“没有扩展名的文件名”排序,但我发现我无法将自定义对象的Arraylist排序为元素
我对同一主题有两个问题:
1)有没有办法对文件夹的文件进行排序,并按照处理此类情况的特定顺序对它们执行操作(如test!.exe和test.exe)
2)文件夹中的文件是否有默认顺序?我测试了一下,似乎命令是由文件名称,但我在官方的Microsoft文档中看到文件没有命令,所以我有点困惑。
答案 0 :(得分:1)
这是一个想法。您可以在文件的基本名称和扩展名之间替换控制字符(或其他一些无效的文件名char)。例如,将vbTab
作为分隔符。
For Each objFile in colFiles
strBaseName = objFSO.GetBaseName(objFile.Path)
strExtension = objFSO.GetExtensionName(objFile.Path)
outputLines.Add strBaseName & vbTab & strExtension
Next
排序后,您只需记住在对文件执行任何操作之前将其交换回来。
For Each outputLine in outputLines
strFile = Replace(outputLine, vbTab, ".")
...
Next