我正在尝试编写一个对大量.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
答案 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。
如果您将代码放在
之后自动化ExcelWScript.Echo f, oFile.Path : f = f + 1
行,您可能会找到打破Excel的(第一个?)文件。使用任务管理器监视内存使用和/或累积Excel zombi进程当然是可取的。
拥有像f
这样的计数器可以帮助您在少量文件之后破坏脚本
If f > TooMuch Then Exit For
这样,您可以根据需要经常调用脚本,直到处理完所有文件。