VBScript to Move files with particular extension

后端 未结 3 1254
你的背包
你的背包 2020-12-21 10:43

I currently have a VBscript that scans a folder for files and moves the files to particular folders depending on key words in the file name.

I need currently the scr

相关标签:
3条回答
  • 2020-12-21 11:03

    before the extension put a * that will find all files with that externsion. Example: oFSO.MoveFile (PATH\*.EXTERNSION)

    0 讨论(0)
  • 2020-12-21 11:05

    here is a recusive function to list files in folders and sub folders it's tested and working, but you'll probably need some adaptation to your own forkflow. And it's not the most optimized, but it's simple to read

    Sub test()
      aFiles = F_ListFilesInDirAndSubDir("C:\foo\folder")
      'then, add some code to parse the array:
      For i = 0 to UBound(aFiles)
          'Move or not to move, that is what your code should tell
      Next
    End Sub
    
    Public Function F_ListFilesInDirAndSubDir(ByVal sDir)
        '===============================================================================
        'Get the list of files in a directory and in all its sub directories With the full path
        '===============================================================================
        Dim sChild      As String
        Dim aFolders    As Variant
        Dim aFiles      As Variant
        Dim aChildFiles As Variant
        Dim i           As Long
        Dim j           As Long
        F_ListFilesInDirAndSubDir = aFiles
        Set fs = CreateObject("Scripting.FileSystemObject")
        If Not fs.FolderExists(sDir) Then Exit Function
    
        'Get the files in the directory
        aFiles = F_ListFilesInDir(sDir)
        'Add the fullpath
        For i = 0 To UBound(aFiles)
            If aFiles(i) <> "" Then
                aFiles(i) = sDir & "\" & CStr(aFiles(i))
            End If
        Next
    
        'get the folders
        aFolders = F_ListFoldersInDir(sDir)
    
        'for each folders, push the files in the file list
        For i = 0 To UBound(aFolders)
            If aFolders(i) <> "" Then
                sChild = sDir & "\" & CStr(aFolders(i))
                'Recursive call on each folders
                aChildFiles = F_ListFilesInDirAndSubDir(sChild)
                'Push new items
                For j = 0 To UBound(aChildFiles)
                    If aChildFiles(j) <> "" Then
                        ReDim Preserve aFiles(UBound(aFiles) + 1)
                        aFiles(UBound(aFiles)) = aChildFiles(j)
                    End If
                Next
            End If
        Next
    
        F_ListFilesInDirAndSubDir = aFiles
    End Function
    
    Public Function F_ListFilesInDir(ByVal sDir)
        '===============================================================================
        'Get the list of files in a directory
        '===============================================================================
        Dim aList     As Variant
        Dim i         As Long
        Dim iChild    As Long
        Dim oFile
        Dim oFolder
        Dim oChildren
        ReDim aList(0)
        F_ListFilesInDir = aList
    
        Set fs = CreateObject("Scripting.FileSystemObject")
    
        If Not fs.FolderExists(sDir) Then Exit Function
    
        Set oFolder = fs.GetFolder(sDir)
        Set oChildren = oFolder.Files
    
        iChild = CDbl(oChildren.Count) - 1
        If iChild = -1 Then Exit Function
    
        ReDim aList(iChild)
        i = 0
        For Each oFile In oChildren
            aList(i) = oFile.Name
            i = i + 1
        Next
    
        F_ListFilesInDir = aList
    End Function
    
    Public Function F_ListFoldersInDir(ByVal sDir As String) As Variant
        '===============================================================================
        'Get the list of folders in a directory
        '===============================================================================
        Dim aList     As Variant
        Dim i         As Long
        Dim oDir
        Dim oFolder
        Dim oChildren
        ReDim aList(0)
    
        F_ListFoldersInDir = aList
    
        Set fs = CreateObject("Scripting.FileSystemObject")
        If Not fs.FolderExists(sDir) Then Exit Function
    
        Set oFolder = fs.GetFolder(sDir)
        Set oChildren = oFolder.SubFolders
    
        If oChildren.Count = 0 Then Exit Function
    
        ReDim aList(oChildren.Count - 1)
        i = 0
        For Each oDir In oChildren
            aList(i) = oDir.Name
            i = i + 1
        Next
    
        F_ListFoldersInDir = aList
    End Function
    
    0 讨论(0)
  • 2020-12-21 11:30

    Some notes:

    Sub listfolders(startfolder)
    Dim fs 
    Dim fl1 
    Dim fl2 
    
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set fl1 = fs.GetFolder(startfolder)
    
        For Each fl2 In fl1.SubFolders
            Debug.Print fl2.Path
    
            ''process the files
            ProcessFiles fl2.Path 
    
            'Recursion: lists folders for each subfolder
            listfolders fl2.Path
        Next
    End Sub
    
    ''Code copied from question
    Sub ProcessFiles(sPath)
        ' Scan each file in the folder
        For Each sFile In oFSO.GetFolder(sPath).Files
            ' check if the file name contains TV Show Parameters
            If InStr(1, sFile.Name, "hdtv", 1) OR InStr(1, sFile.Name, "s0", 1) <> 0 Then
                ' TV Show Detected - Move File
                objLog.WriteLine Now() & " - " _
                      & sFile.Name & " Detected as TV Show - Moving to " & sTV
                oFSO.MoveFile sTorrents & sFile.Name, sTV & sFile.Name
            ' Move all other Files to Movies Directory
            Else 
                objLog.WriteLine Now() & " - " _
                & sFile.Name & " Detected as Movie - Moving to " & sMovie
                oFSO.MoveFile sTorrents & sFile.Name, sMovie & sFile.Name
            End If
        Next
    End Sub
    
    0 讨论(0)
提交回复
热议问题