【发布时间】:2018-08-17 04:46:09
【问题描述】:
以下 VBscript 的目标是为指定目录中具有特定扩展名的所有文件添加用户定义的字符串:
directory = "C:\Users\xxxxxxxx\Desktop\Test\" 'include final backslash
extension = ".doc" 'include period, ex: ".tab"
''''''''''''''''''''''''''''''''''''''''''
addStr = InputBox("Enter the text you would like to prepend:", , "xxxxxxxx_xxxxxxxxxx_x_xx_xxx_")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(directory)
Set colFiles = objFolder.Files
For Each file In colFiles
absPath = objFSO.GetAbsolutePathName(file)
currentExtension = objFSO.GetExtensionName(absPath)
If StrComp(currentExtension, Mid(extension, 2)) = 0 Then
file.Name = addStr & objFSO.GetFileName(file)
End If
Next
脚本通常运行良好,但偶尔会出现这种问题行为:
在包含大量文件和/或具有长名称的文件的目录上运行脚本时,脚本似乎会迭代回文件集合(即,预先添加到已经预先添加的文件)并这样做直到文件名变得太长而无法被 FSO 识别,从而导致脚本崩溃。
发生这种情况的文件数量/文件名长度的阈值似乎非常明显且可重现。例如,如果我创建一个目标目录(例如“...\Desktop\Test”),其中包含一个名为“1.doc”的文件,该文件被多次复制/粘贴,脚本将正确重命名多达 31 个文件,但它演示了 32+ 个文件的问题行为。同样,如果我在 31 个文件(以相同方式生成)上运行该脚本两次,则该脚本在第二次运行时演示了有问题的行为。
非常感谢您对潜在问题的任何想法 - 在此先感谢!
【问题讨论】:
-
这个现有问题非常相关:stackoverflow.com/questions/17165630/…