-1

我有一个要求,但我不确定如何去做。我需要编写一个 VBScript 来查找指定目录中的某些文件。如果找到该文件,则需要将其移动到另一个目录(存档)中。

例如,我在目录 C:\Transfer 中有文件 Z001_130711.txt,文件名的前四个字符将始终相同,最后 6 个字符会发生变化,如您所见,这是文件创建的日期/跑。

在我移动文件之前,我必须做一些其他的事情,为此我已经想出了 VBScript 代码。

完成后,我需要将其移动到 C:\Transfer\Archive。这是我卡住的地方,我不知道该怎么做。

任何帮助将不胜感激。

4

1 回答 1

0

这应该让你大部分时间。您需要找出短语“If UCase(Right(objFile.Name, 4)) = ".VBP" Then" 的正确替换

目标文件也附加了“.bak”。你需要删除它。

将文件列表放在字典中的理由目前让我无法理解。我认为这与该过程经常失败有关,以至于我需要能够获取已处理文件与未处理文件的列表。

Option Explicit

Dim dicFiles 
Set dicFiles = CreateObject("Scripting.Dictionary")

Private Sub AddFile(objFile)
  If dicFiles Is Nothing Then
    Set dicFiles = CreateObject("Scripting.Dictionary")
  End If
  If Not dicFiles.Exists(objFile.Path) Then
    dicFiles.Add objFile.Path, "False"
  End If
End Sub

  Dim strRootPath 'As String
  Dim objFSO 'As New FileSystemObject
  Dim objFile 'As File
  Dim i 'As Integer
  Dim iMax 'as integer

  strRootPath = "C:\Transfer"
  Dim objFolder' As Folder
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objFolder = objFSO.GetFolder(strRootPath)

  'MsgBox "" & objFolder.Files.Count & " files in folder " & objFolder.Path
  For Each objFile In objFolder.Files
    'MsgBox "Filespec: " & objFile.Name
    If UCase(Right(objFile.Name, 4)) = ".VBP" Then 
      'MsgBox "Adding file " & objFile.Name
      AddFile objFile
    End If
  Next

  Dim arrFiles '() As Variant
  arrFiles = dicFiles.Keys

  'MsgBox "UBound(arrfiles)=" & UBound(arrFiles)

  Dim fsIn 'As String
  Dim fsOut 'As String
  Dim strFilespec 'As String
  For i = 0 To UBound(arrFiles)
    Set objFile = objFSO.GetFile(arrFiles(i))
    strFilespec = arrFiles(i)
    fsOut = strFilespec & ".bak"
    If objFSO.FileExists(fsOut) Then
      objFSO.DeleteFile fsOut, True  'True = Force
    End If

    fsIn = strFilespec
    objFSO.MoveFile fsIn, fsOut

  Next

  Set objFSO = Nothing
于 2013-07-11T19:08:10.027 回答