Vbscript 编辑目录中的所有文件时出现问题

Vbscript 编辑目录中的所有文件时出现问题,vbscript,Vbscript,我正在尝试编写一个VBScript,对大量的.csv文件进行小的更改。下面的脚本按预期工作,它进行更改,然后将文件移动到不同的给定位置,但一次仅对20-40个文件有效,而不是文件夹中的所有文件。我真的被卡住了,不知道为什么它不会对文件夹中的每个文件进行更改。。。。有什么想法吗?谢谢 Dim objFSO, sourceFiles, xl, wb, sht Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject") Set xl

我正在尝试编写一个VBScript,对大量的.csv文件进行小的更改。下面的脚本按预期工作,它进行更改,然后将文件移动到不同的给定位置,但一次仅对20-40个文件有效,而不是文件夹中的所有文件。我真的被卡住了,不知道为什么它不会对文件夹中的每个文件进行更改。。。。有什么想法吗?谢谢

Dim objFSO, sourceFiles, xl, wb, sht

Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
Set xl = CreateObject("Excel.Application")
Set sourceFiles = objFSO.GetFolder("C:\SomeLocation").Files

  For each objFile In sourceFiles
    Set wb = xl.Workbooks.Open(objFile)
    Set sht = xl.ActiveSheet

    sht.Cells(3,5) = sht.Cells(1,1)

    wb.Save
    wb.Close True
    objFile.Move ("C:\SomeLocation")
  Next

Wscript.Quit

作为你的移动代码-在这里

objFile.Move ("C:\SomeLocation")
在你的(第1版)

如果出现故障(缺少尾随
\
),则可能值得您使用以下测试程序

Option Explicit

Const csSrc   = "..\data\31007260\src"
Const csDst   = "..\data\31007260\dst"
Const cnFiles = 5
Const cbAll   = False

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

If goFS.FolderExists(csSrc) Then goFS.DeleteFolder csSrc
goFS.CreateFolder csSrc
If goFS.FolderExists(csDst) Then goFS.DeleteFolder csDst
goFS.CreateFolder csDst

Dim f
For f = 1 To cnFiles
    goFS.CreateTextFile goFS.BuildPath(csSrc, f & ".txt")
Next

Dim oSrc : Set oSrc = goFS.GetFolder(csSrc).Files
Dim oFile
f = 0
For Each oFile In oSrc
    WScript.Echo f, oFile.Path : f = f + 1
'   If cbAll Or f Mod 2 Then oFile.Move csDst & "\"
    If cbAll Or f Mod 2 Then goFS.MoveFile oFile.Path, csDst & "\"
Next

WScript.Echo "-------------------"

Dim oDst : Set oDst = goFS.GetFolder(csDst).Files
f = 0
For Each oFile In oDst
    WScript.Echo f, oFile.Path : f = f + 1
Next
样本输出:

cscript 31007260.vbs
0 E:\trials\SoTrials\answers\29976432\data\31007260\src\2.txt
1 E:\trials\SoTrials\answers\29976432\data\31007260\src\4.txt
2 E:\trials\SoTrials\answers\29976432\data\31007260\src\3.txt
3 E:\trials\SoTrials\answers\29976432\data\31007260\src\1.txt
4 E:\trials\SoTrials\answers\29976432\data\31007260\src\5.txt
-------------------
0 E:\trials\SoTrials\answers\29976432\data\31007260\dst\2.txt
1 E:\trials\SoTrials\answers\29976432\data\31007260\dst\3.txt
2 E:\trials\SoTrials\answers\29976432\data\31007260\dst\5.txt
为了确保VBScript在移动大量文件方面没有任何问题,文件集合足够智能,可以在循环过程中处理更改

因此,罪魁祸首是Excel。即使这样,我也会收到一些错误消息。我相信你真的移除了奥恩

如果将代码放在

WScript.Echo f, oFile.Path : f = f + 1
行中,您可能会找到破坏Excel的(第一个?)文件。使用任务管理器来监视内存使用和/或Excel zombi进程的累积当然是可取的

使用类似
f
的计数器可以帮助您在少量文件之后中断脚本

If f > TooMuch Then Exit For

这样,您就可以根据需要随时调用脚本,直到处理完所有文件。

如果excel是一个问题,这就更有意义了。。。我将解决其中一些问题,谢谢。是不是不更改它们或不移动它们?不更改它们,它将更改并移动20-40个文件,然后程序将结束,没有任何错误,但是当我转到源文件夹时,几乎所有的源文件夹都仍然保留着原始的日期修改日期。您是否尝试过在
wb.Close
之后使用延迟?开始时,请尝试
WScript.Sleep 2000
。我在关闭Excel工作簿后试图过快地使用它时遇到了一些问题,就好像调用不同步一样。但是,您应该会遇到错误,除非您在代码段中未显示的地方定义了
OERN
If f > TooMuch Then Exit For