gpt4 book ai didi

vbscript - 循环中迭代次数太多

转载 作者:行者123 更新时间:2023-12-02 21:46:47 24 4
gpt4 key购买 nike

此脚本收集文件夹中的所有文件,并通过在文件名后附加行数来重命名文件。所有文件都是 .txt 文件。该方法(因为 fso.MoveFilefso.DeleteFile 太特殊,会产生权限错误)是

  1. 创建文本文件,
  2. 然后在该文件夹中创建文件集合,
  3. 然后使用新名称将每个文件复制到同一文件夹中,并且
  4. 最后删除复制的原始文件。

除非集合中没有空文本文件,否则脚本可以正常工作。发生的情况是,使用新文件重建集合,并且脚本再次重命名文件。我知道我可以通过检查每个文件是否存在某些重复字符串来防止这种情况,但我想知道发生了什么?为什么脚本要重建文件集合并再次运行它们并重命名每个文件?这会一直持续到我终止该进程为止。

另一个有趣的事实是,如果我碰巧捕获了一个空文本文件,则会显示我的消息并且脚本会在那里停止,但仍然会再次重新处理集合中的第一个文件。请注意,空文件恰好是集合中的最后一个文件,但第一个文件再次被处理。

因此,根据设计,创建的名为“ab0.txt”的文本文件被重命名为“ab0-15.txt”,因为它有 15 行文本。发生的情况是这个新重命名的文件看起来像“ab0-15-15-15-15-15-15-15-15-15-15.txt”

问题:发生了什么事?有没有更好、更有效的方法来实现这一目标?

以下是与该问题相关的代码:

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(strSaveTo)
Set colFiles = oFolder.Files

' Call Sub to copy and rename
ChangeFileName colFiles
MsgBox("File renaming complete.")
' Exit code

Sub ChangeFileName(collectionSet)
Const ForReading = 1
Dim oFile

For Each oFile In collectionSet
Set LineCnt = fso.OpenTextFile(oFile, ForReading)
If oFile.Size = 0 then
'if this msg is not included, weird things happen
MsgBox("The file named " & oFile & _
" is empty.You may want to verify and manually delete it.")
'[I had some code in here to delete the empty file, but nothing worked]
Else
Do While LineCnt.AtEndOfStream <> True
LineCnt.SkipLine
Loop
lineVar = lineCnt.Line-1
strNewFile = strSaveTo & Left(oFile.name, Len(oFile.name)-4) & _
"-" & lineVar & ".txt"
fso.CopyFile oFile, strNewFile
LineCnt.Close
fso.DeleteFile oFile, True
End If
Next
End Sub

最佳答案

我听说过一些轶事证据表明 Files 集合是“实时”的,这意味着新创建的文件将被添加到集合中并进行迭代,但我找不到任何说明文件以一种方式或另一种方式。无论如何,在处理集合中的 File 对象之前,先将它们复制到数组中可能是个好主意:

Dim oFile
Dim fileArray()
Dim i

ReDim fileArray(collectionSet - 1)
i = 0
For Each oFile in collectionSet
Set fileArray(i) = oFile
i = i + 1
Next

For Each oFile In fileArray
' Count lines and rename
Next

关于vbscript - 循环中迭代次数太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com