0

我正在寻找编写一个 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 循环,然后解析文件名并在该循环中移​​动文件 - 但我担心这样做的效率,因为有几百个文件要移动。任何人都可以建议最干净,最有效的方法吗?任何帮助将非常感激。

4

1 回答 1

1

一个计划:

  1. 第一个循环将 Ids(和文件夹名称)从映射文件中提取到dictionary(key = id, value = folder name (possibly)) [永远不要将文件中的行集合复制到内存中的数组中,如果你不这样做'不需要访问项目 i 来处理项目 j (i <>j)]
  2. 对(一个且唯一?)源目录中的文件进行第二次循环。Splito文件。Name就对了!分隔符“_”,而不是“-”。如果在字典中找到 Id,请使用这些部件来构建 ( FileSystemObject.BuildPath()) 新/目标文件规范。检查 ( FileSystemObject.FileExists()) 目标文本是否存在,如果不存在,oFile。Move
于 2013-02-13T11:51:07.297 回答