根据部分文件名查找文件,并在vbs中的其他位置移动文件

时间:2013-02-13 10:52:32

标签: file parsing scripting vbscript

我正在编写一个vbs脚本来执行以下操作。 - 有一个映射文件,其中包含一个标识符,后跟一个目录名称(例如123456-Documents)。 - 对于映射文件中的每一行,将有一个文档以我需要移动到别处的标识符开头(例如123456_otherStuff_Dec 12.xls)。 - 然后我需要解析完整的文件名并取中间字符串(otherStuff)来确定它进入哪个子目录。

所以在上面的例子中,文件“123456_otherStuff_Dec 12.xls”应该在目录C:... / current / Documents / otherStuff / 123456_otherStuff_Dec 12.xls中结束。

我是vbs的新手,但我知道一点Java所以能够开始这个。这就是我到目前为止所做的:

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("C:\Documents and Settings\w133960\Desktop\test1\Text1.txt", ForReading) 

Const ForReading = 1 

Dim arrFileLines() 
i = 0 
Do Until objFile.AtEndOfStream 
Redim Preserve arrFileLines(i) 
arrFileLines(i) = objFile.ReadLine 
i = i + 1 
Loop 
objFile.Close 


For Each strLine in arrFileLines 
WScript.Echo strLine 
MyArray = Split(strLine, "-", -1, 1)
WScript.Echo MyArray(0)
WScript.Echo MyArray(1)

Next

这将通过映射文件,并将为我解析标识符。下一部分将搜索以标识符开头的文件,然后解析它的文件名并根据它将其移动到相关目录中。 我可以在当前循环中添加另一个For循环,然后解析文件名并在该循环中移​​动文件 - 但我担心这个效率,因为有几百个文件要移动。 任何人都可以建议最干净,最有效的方法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

计划:

  1. 从中提取Ids(和文件夹名称)的第一个循环 将文件映射到dictionary(key = id,value =文件夹名称 (可能))[永远不要将文件中的行集合复制到 数组在内存中,如果您不需要访问项目i来处理项目 j(i< j)]
  2. 对(一个且唯一的?)源目录中的文件进行第二次循环。 Split oFile。Name正确! separator" _",not" - "。如果在字典中找到了Id,请使用这些部分构建(FileSystemObject.BuildPath())新/目标文件规范。检查(FileSystemObject.FileExists())目标文件是否存在,如果不存在,请查看oFile。Move