对文件夹中的文件进行排序

时间:2014-10-13 12:14:45

标签: sorting vbscript

我正在尝试对文件夹的文件进行排序,并按特定顺序对它们执行操作(例如,按名称或修改日期) 我尝试了以下方法:

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文档中看到文件没有命令,所以我有点困惑。

1 个答案:

答案 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