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:\Folder 1\Temp\”文件夹中有以下文件

C:\文件夹 1\Temp\Test 1_2012_10_25.txt

C:\文件夹 1\Temp\Test 2_2013_08_25.txt

C:\文件夹 1\Temp\Test 3_2011_10_25.txt

C:\文件夹 1\Temp\Test 4_2010_10_25.txt

我希望这些文件根据文件名中的文件名和年份移动到文件夹,如下所示。我上面的代码只为昨天的日期做 1 个文件。我希望它循环并组织文件夹中的所有文件。

C:\文件夹 1\Temp\Test 1_2012_10_25.txt > D:\Test 1\2012\Test 1_2012_10_25.txt

C:\文件夹 1\Temp\Test 2_2013_08_25.txt > D:\Test 2\2013\Test 2_2013_08_25.txt

C:\文件夹 1\Temp\Test 1_2012_10_25.txt > D:\Test 3\2011\Test 3_2012_10_25.txt

C:\文件夹 1\Temp\Test 1_2012_10_25.txt > D:\Test 1\2012\Test 1_2012_10_25.txt

此外,如果 D:\ 上的文件夹不存在,则创建它们。

谢谢

4

1 回答 1

1

我仍然声称在我的答案中对代码进行了轻微修改:

  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

更新 - 使用年目录的父文件夹的文件名的第一个(“Test 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
于 2013-01-21T17:12:31.540 回答