2013-07-11 3 views
-1

У меня есть требование, и я не уверен, как это сделать. Мне нужно написать VBScript для поиска определенных файлов в указанном каталоге. Если файл найден, мне нужно переместить его в другой каталог (Архив).Как перенести файлы из одного каталога в другой?

Например, у меня есть файл Z001_130711.txt в каталоге C: \ Transfer, первые четыре символа имени файла всегда будут одинаковыми, что изменится, это последние 6 символов, которые, как вы видите, - это дата, когда файл был создан/запущен.

Прежде чем переместить файл, я должен сделать некоторые другие вещи, и для этого я уже придумал код VBScript.

После того как я закончил, мне нужно переместить его в C: \ Transfer \ Archive. Это, где я застрял, и я не знаю, как это сделать.

Любая помощь будет действительно оценена.

+0

Если вы хотите использовать vbscript, почему вы отметили этот вопрос с помощью VB.NET? – Steve

+1

Как определить файл, если вы не знаете точного имени? Всегда будет только один файл с именем 'Z001_ *'? Кроме того, вы можете проверить документацию ['FileSystemObject'] (http://msdn.microsoft.com/en-us/library/6tkce7xa%28v=vs.84%29.aspx). –

ответ

0

Это должно сделать вам большую часть пути. Вам нужно будет найти правильную замену фразы «Если UCase (справа (objFile.Name, 4)) =« .VBP »Затем«

Также в файлах назначения добавлен «.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