2013-02-13 75 views
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循環,然後解析文件名並在該循環內移動文件 - 但由於有幾百個文件需要移動,所以我很擔心這種效率。 任何人都可以建議最乾淨和最有效的方式做到這一點?任何幫助將非常感激。

+0

這些文件位於何處?它們全都在一個文件夾中,還是需要搜索整個文件系統?該ID是唯一的還是可能有多個以相同ID開頭的文件名?所有目標文件夾都是相對於同一個父目錄嗎? – 2013-02-13 13:07:29

+0

文件全部在一個文件夾中。可能有幾個文件名具有相同的起始ID,但是文件將根據文件名的其餘部分移入不同的目錄。所有目標文件夾都與相同的父目錄相關。 – user1587060 2013-02-13 13:49:31

+0

然後與@ Ekkehard.Horner建議。 – 2013-02-13 23:17:32

回答

1

一個計劃:

  1. 第一環路從 映射文件中提取的ID(和文件夾名稱)到一個dictionary(鍵= ID,值=文件夾名稱 (可能))[從未如果您不需要訪問項目i以處理項目 j(i <> j),則將文件中的行集合複製到內存中的 陣列中]
  2. 第二個循環遍歷(one和只有?)源目錄。 Split oFile。 Name就正確了!分隔符「_」,而不是「 - 」。如果在字典中找到Id,請使用零件來構建新的/目標文件規範(FileSystemObject.BuildPath())。檢查(FileSystemObject.FileExists())目標文件是否存在,如果不存在,oFile。 Move
相關問題