File 基于部分文件名查找文件,并将文件移动到vbs中的其他位置

File 基于部分文件名查找文件,并将文件移动到vbs中的其他位置,file,parsing,scripting,vbscript,File,Parsing,Scripting,Vbscript,我想写一个vbs脚本来完成以下任务。 -有一个映射文件,其中包含一个标识符,后跟一个目录名(例如123456文档)。 -对于映射文件中的每一行,都会有一个以我需要移动到别处的标识符开头的文档(例如123456_otherStuff_Dec 12.xls)。 -然后我需要解析完整的文件名,并使用中间的字符串(otherStuff)来确定它进入哪个子目录 因此,在上面的示例中,文件“123456_otherStuff_Dec 12.xls”应该位于目录C:…/current/Documents/ot

我想写一个vbs脚本来完成以下任务。 -有一个映射文件,其中包含一个标识符,后跟一个目录名(例如123456文档)。 -对于映射文件中的每一行,都会有一个以我需要移动到别处的标识符开头的文档(例如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循环,然后解析文件名并在该循环中移动文件-但我担心这样做的效率,因为要移动几百个文件。 有人能就最干净、最有效的方法提出建议吗?任何帮助都将不胜感激。

计划:

  • 从文件中提取ID(和文件夹名称)的第一个循环 将文件映射到
    字典中(key=id,value=folder name
    (可能))[切勿将文件中的行集合复制到
    内存中的数组,如果您不需要访问项i来处理项
    j(i)]
  • 在(一个且唯一?)源目录中的文件上进行第二个循环<代码>拆分文件。
    名称
    正确!分隔符“_”,而不是“-”。如果在字典中找到Id,请使用这些部分来构建(
    FileSystemObject.BuildPath()
    )新的/目标文件规范。检查(
    FileSystemObject.FileExists()
    )目标文本是否存在,如果不存在,则移动文件。

  • 文件在哪里?它们都在一个文件夹中,还是需要搜索整个文件系统?ID是否唯一,或者是否有多个文件名以相同ID开头?所有目标文件夹是否都相对于同一父目录?文件都在一个文件夹中。可能有多个文件名具有相同的起始ID,但这些文件将根据文件名的其余部分移动到不同的目录中。所有目标文件夹都相对于同一父目录。然后按照@Ekkehard.Horner的建议进行操作。