2013-01-21 24 views
0

我的最後一篇文章是我在論壇上的第一篇文章,在我回來檢查之前就已經關閉了,所以這裏是我再次更詳細的問題。用文件名移動文件的日期

Const SrcFilePath = "C:\Folder 1\Temp\" 

WScript.echo "SrcFilePath = " & SrcFilePath 

Const FileExtension = ".txt" 

newdate = date()-1 

Set fso = CreateObject("Scripting.FileSystemObject") 

      If Day(newdate)>9 Then 
          ExtensionDay = Day(newdate) 
      Else 
          ExtensionDay = "0"&Day(newdate) 
      End If 

      If Month(newdate)>9 Then 
          ExtensionMonth = Month(newdate) 
      Else 
          ExtensionMonth = "0"&Month(newdate) 
      End If 

      If Year(newdate)>9 Then 
          ExtensionYear = Year(newdate) 
      Else 
          ExtensionYear = Year(newdate) 
      End If 

Mon = MonthName(ExtensionMonth, true) 
Yer = Right(ExtensionYear,2) 

DateTag = ExtensionDay & "_" & ExtensionMonth & "_" & ExtensionYear 

DateTag1 = ExtensionYear 

DestFileName = "Test File_" & DateTag & FileExtension 

WScript.echo DestFileName 

SrcFile = SrcFilePath & "Test File_" & DateTag & FileExtension 

Dest_File = "D:\Test 1\" & ExtensionYear & "\" 

WScript.echo "Copy from =" & SrcFile, "Copy to =" & Dest_File 

Fso.CopyFile SrcFile, Dest_File 

上面的代碼會得到具有昨日在文件名中日期的文件,並將其與該文件的年度移動到文件夾中。

這是我想它做什麼

「C:\文件夾1的\ Temp \」文件夾中有

C中的以下文件:\文件夾1個\ TEMP \測試1_2012_10_25.txt

C:\文件夾1 \ TEMP \測試2_2013_08_25.txt

C:\文件夾1 \ TEMP \測試3_2011_10_25.txt

C:\文件夾1個\ TEMP \測試4_2010_10_25.txt

我希望這些文件根據文件名稱和年份從下面的文件名移動到文件夾。我上面的代碼只爲昨天的日期做了1個文件。我希望它循環並組織文件夾中的所有文件。

C:\文件夾1個\ TEMP \測試1_2012_10_25.txt> d:\試驗1 \ 2012 \測試1_2012_10_25.txt

C:\文件夾1個\ TEMP \測試2_2013_08_25.txt> d:\測試2 \ 2013 \測試2_2013_08_25.txt

C:\文件夾1個\ TEMP \測試1_2012_10_25.txt> d:\測試3 \ 2011 \測試3_2012_10_25.txt

C:\文件夾1個\ TEMP \測試1_2012_10_25.txt> D:\ Test 1 \ 2012 \ Test 1_2012_10_25.txt

另外,如果D:\上的文件夾不存在,則創建它們。

感謝

回答

1

我仍然聲稱,該代碼在my answer here稍作修改:

Const csSrc = "..\data\in2" 
    Const csDst = "..\data\out2" 
    Dim f, n, d 
    For Each f In goFS.GetFolder(csSrc).Files 
     n = Split(f.Name, "_") ' split on _ instead of - 
     If 3 = UBound(n) Then ' 4 parts instead of 2 
     d = goFS.BuildPath(csDst, n(1)) 
     If Not goFS.FolderExists(d) Then goFS.CreateFolder d 
     f.Move goFS.BuildPath(d, f.Name) 
     End If 
    Next 

解決您的問題。證據:

tree /a /f ..\data\in2 
    Test 7_2012_11_25.txt 
    Test 1_2010_11_25.txt 
    Test 2_2010_12_25.txt 
    Test 9_2012_13_25.txt 
    Test 8_2012_12_25.txt 
    Test 3_2010_13_25.txt 
    Test 6_2011_13_25.txt 
    Test 4_2011_11_25.txt 
    Test 5_2011_12_25.txt 

tree /a /f ..\data\out2 
+---2011 
|  Test 6_2011_13_25.txt 
|  Test 4_2011_11_25.txt 
|  Test 5_2011_12_25.txt 
| 
+---2010 
|  Test 1_2010_11_25.txt 
|  Test 2_2010_12_25.txt 
|  Test 3_2010_13_25.txt 
| 
\---2012 
     Test 7_2012_11_25.txt 
     Test 9_2012_13_25.txt 
     Test 8_2012_12_25.txt 

更新 - 先用( 「試驗n」)的年度目錄的父文件夾的文件名的一部分:

就採用相同的策略:

For Each f In goFS.GetFolder(csSrc).Files 
     n = Split(f.Name, "_") 
     If 3 = UBound(n) Then 
     d = goFS.BuildPath(csDst, n(0)) 
     If Not goFS.FolderExists(d) Then goFS.CreateFolder d 
     d = goFS.BuildPath(d, n(1)) 
     If Not goFS.FolderExists(d) Then goFS.CreateFolder d 
     f.Move goFS.BuildPath(d, f.Name) 
     End If 
    Next 
+0

嗨Ekkehard謝謝回覆。我的編程知識不是那麼好,但我得到一個錯誤所需的對象:'goFS'。 – user1995684

+0

我需要添加這一行Dim goFS:Set goFS = CreateObject(「Scripting.FileSystemObject」)。它現在工作,但其創建的文件夾不是一年,但數字20 – user1995684

+0

只是再次測試它,並且工作正常。我還有一個請求。是否可以使用文件名的第一部分創建一個文件夾,如測試6和年,以便所有測試6或7或8文件都在相關的Year文件夾中。再次感謝。 – user1995684

相關問題