我正在编写一个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循环,然后解析文件名并在该循环中移动文件 - 但我担心这个效率,因为有几百个文件要移动。 任何人都可以建议最干净,最有效的方法吗?任何帮助将不胜感激。
答案 0 :(得分:1)
计划:
dictionary
(key = id,value =文件夹名称
(可能))[永远不要将文件中的行集合复制到
数组在内存中,如果您不需要访问项目i来处理项目
j(i< j)] Split
oFile。Name
正确! separator" _",not" - "。如果在字典中找到了Id,请使用这些部分构建(FileSystemObject.BuildPath()
)新/目标文件规范。检查(FileSystemObject.FileExists()
)目标文件是否存在,如果不存在,请查看oFile。Move