无法编辑目录中的所有文件

时间:2015-06-23 15:36:49

标签: vbscript

我正在尝试编写一个对大量.csv文件进行少量更改的VBScript。下面的脚本按预期工作,它进行更改,然后将文件移动到不同的给定位置,但它一次只能处理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

1 个答案:

答案 0 :(得分:0)

作为您的移动代码 - 这里

objFile.Move ("C:\SomeLocation")

并在previous post(rev 1)

objFSO.MoveFile objFile, "C:\Users\xxx\FixedCSVs"

有问题(缺少尾随\),使用像

这样的测试程序可能值得你花些时间
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。即使这样,我也会期待一些错误信息。我相信你真的删除了OERN。

如果您将代码放在

之后自动化Excel
WScript.Echo f, oFile.Path : f = f + 1

行,您可能会找到打破Excel的(第一个?)文件。使用任务管理器监视内存使用和/或累积Excel zombi进程当然是可取的。

拥有像f这样的计数器可以帮助您在少量文件之后破坏脚本

If f > TooMuch Then Exit For

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