dcsimg
Results 1 to 2 of 2

Thread: Can I combine a robocopy command to a script or set up so they run in order

  1. #1

    Thread Starter
    Junior Member
    Join Date
    May 2018
    Posts
    23

    Can I combine a robocopy command to a script or set up so they run in order

    Hi

    I have the following robocopy script

    Code:
    Robocopy "C:\Users\g\Downloads\sunday\DownLoad" "C:\Users\g\Desktop\test" /MOV /R:10 /W:5 /V /ETA
    and I also have the following script to create folders upto a certain size. What im trying to do is to be able to click on a button and it will run the robocopy script and then run the script below. Can that be done?

    Code:
     option Explicit
    
    ' Global variables
    Dim strBaseDir, strDestDir
    Dim objFSO, objFile
    Dim arrFiles(), i
    Dim lngFolderSize, intFolderNumber, strNextDir, intMoveFile
    
    ' Define paths to work with
    strBaseDir = "C:\Users\g\Desktop\test"
    strDestDir = "C:\Users\g\Desktop\test\DVDS"
    strPlayer = "C:\TEMP\player.exe"
    
    ' Set maximum size of new folders
    Const cMaxFolderSize = 500000000
    
    ' Define class that will hold file information
    Class File
        Public lngSize
        Public strPath
    End Class 
    
    ' Create file system object
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    
    ' Fully resolve paths
    strBaseDir = objFSO.GetAbsolutePathname(strBaseDir)
    strDestDir = objFSO.GetAbsolutePathname(strDestDir)
    strPlayer = objFSO.GetAbsolutePathname(strPlayer)
    
    ' Make sure the folders exists, exit if not
    If Not objFSO.FolderExists(strBaseDir) Then
        WScript.Echo "*ERROR* Folder does not exist: """ & strBaseDir & """."
        WScript.Quit
    End If
    If Not objFSO.FolderExists(strDestDir) Then
        WScript.Echo "*ERROR* Folder does not exist: """ & strDestDir & """."
        WScript.Quit
     End If
     
    ' Initialize array index variable
    i = -1
    
    ' Load info for each file into array (using File class)
    For Each objFile In objFSO.GetFolder(strBaseDir).Files
        ' Don't include any files with size greater than max allowed in a folder
        If objFile.Size > cMaxFolderSize Then
            WScript.Echo "*WARNING* Skipping file: """ & objFile.Path & """, size:""" & objFile.Size & """ exceeds maximum folder size:""" & cMaxFolderSize & """."
        Else
            ' Add another element to the array of type File class
            i = i + 1
            ReDim Preserve arrFiles(i)
            Set arrFiles(i) = New File
    
            ' Store the size and full path to the file
            arrFiles(i).strPath = objFile.Path
            arrFiles(i).lngSize = objFile.Size
        End If
    Next
    
    ' If no files found then exit
    If i = -1 Then
        WScript.Echo "*WARNING* No files found to process."
        WScript.Quit
    End If
    
    ' Sort the files arrary by size in descending order
    SortArray arrFiles
    
    ' Process all files moving to new subfolders until done
    intFolderNumber = 0
    Do
        ' Start a new destination folder and create it (MUST NOT ALREADY EXIST)
        lngFolderSize = cMaxFolderSize
        intFolderNumber = intFolderNumber + 1
        strNextDir = strDestDir & "\" & intFolderNumber & "\"
        objFSO.CreateFolder strNextDir
    
        ' Move files to dest folder until full
        Do
            ' Look for the largest file left that will fit in remaining space
            intMoveFile = GetFileToMove(arrFiles, lngFolderSize)
    
            ' If we found another file to move then move it
            If intMoveFile <> -1 Then
                Wscript.Echo "*DEBUG* Dest:[" & intFolderNumber & "], Available:[" & lngFolderSize & "], File:[" & arrFiles(intMoveFile).strPath & "], Size:[" & arrFiles(intMoveFile).lngSize & "]."
                objFSO.MoveFile arrFiles(intMoveFile).strPath, strNextDir
                lngFolderSize = lngFolderSize - arrFiles(intMoveFile).lngSize
                arrFiles(intMoveFile).lngSize = -1
            End If
        Loop Until intMoveFile = -1
    
        ' Add player file
        objFSO.CopyFile strPlayer, strNextDir
    
    Loop Until AllFilesMoved(arrFiles)
    
    Function GetFileToMove(ByRef arrArray(), lngSize)
        ' Find next largest file to move that fits, -1 if none found
        Dim i
        GetFileToMove = -1
        For i = LBound(arrArray) To UBound(arrArray)
            If arrArray(i).lngSize <> -1 Then
                If arrArray(i).lngSize <= lngSize Then
                    GetFileToMove = i
                End If
                Exit Function
            End If
        Next
    End Function
    
    Function AllFilesMoved(ByRef arrArray())
        ' See if all files have been moved
        Dim i
        AllFilesMoved = True
        For i = LBound(arrArray) To UBound(arrArray)
            If arrArray(i).lngSize <> -1 Then
                AllFilesMoved = False
                Exit Function
            End If
        Next
    End Function
    
    Sub SortArray(ByRef arrArray())
        ' Sort array of files by size, descending order (simple bubble sort)
        Dim i, j, intTemp
        For i = LBound(arrArray) to UBound(arrArray)
            For j = LBound(arrArray) to UBound(arrArray) - 1
    '            If arrArray(j).lngSize < arrArray(j + 1).lngSize Then
                If LCase(arrArray(j).strPath) > LCase(arrArray(j + 1).strPath) Then
                    Set intTemp = arrArray(j + 1)
                    Set arrArray(j + 1) = arrArray(j)
                    Set arrArray(j) = intTemp
                    Set intTemp = Nothing
                End If
            Next
        Next
    End Sub
    Last edited by tweacle; Nov 11th, 2018 at 04:49 PM. Reason: SCRIPT AMENDED

  2. #2

    Thread Starter
    Junior Member
    Join Date
    May 2018
    Posts
    23

    Re: Can I combine a robocopy command to a script or set up so they run in order

    Hi

    Ive found a different way and going to ignore robocopy as think it confusing things too much .

    I have amended the other script to what I show below but I keep getting a error as below

    LINE 88
    CHAR 170
    CODE 800A0409

    Line highlighted where error occours

    Any Ideas?

    Apologies but unless Im doing it wrong im trying to post as code but it not letting me do that

    Thanks


    Option Explicit

    With CreateObject("Scripting.FileSystemObject") .MoveFile "C:\Users\g\Downloads\sunday\DownLoad\*.*", "C:\Users\g\Desktop\test" End With

    ' Global variables
    Dim strBaseDir, strDestDir
    Dim objFSO, objFile
    Dim arrFiles(), i
    Dim lngFolderSize, intFolderNumber, strNextDir, intMoveFile

    ' Define paths to work with
    strBaseDir = "C:\Users\g\Desktop\test"
    strDestDir = "C:\Users\g\Desktop\split"
    strPlayer = "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"

    ' Set maximum size of new folders
    Const cMaxFolderSize = 4294967296

    ' Define class that will hold file information
    Class File
    Public lngSize
    Public strPath
    End Class

    ' Create file system object
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

    ' Fully resolve paths
    strBaseDir = objFSO.GetAbsolutePathname(strBaseDir)
    strDestDir = objFSO.GetAbsolutePathname(strDestDir)
    strPlayer = objFSO.GetAbsolutePathname(strPlayer)

    ' Make sure the folders exists, exit if not
    If Not objFSO.FolderExists(strBaseDir) Then
    WScript.Echo "*ERROR* Folder does not exist: """ & strBaseDir & """."
    WScript.Quit
    End If
    If Not objFSO.FolderExists(strDestDir) Then
    WScript.Echo "*ERROR* Folder does not exist: """ & strDestDir & """."
    WScript.Quit
    End If

    ' Initialize array index variable
    i = -1

    ' Load info for each file into array (using File class)
    For Each objFile In objFSO.GetFolder(strBaseDir).Files
    ' Don't include any files with size greater than max allowed in a folder
    If objFile.Size > cMaxFolderSize Then
    WScript.Echo "*WARNING* Skipping file: """ & objFile.Path & """, size:""" & objFile.Size & """ exceeds maximum folder size:""" & cMaxFolderSize & """."
    Else
    ' Add another element to the array of type File class
    i = i + 1
    ReDim Preserve arrFiles(i)
    Set arrFiles(i) = New File

    ' Store the size and full path to the file
    arrFiles(i).strPath = objFile.Path
    arrFiles(i).lngSize = objFile.Size
    End If
    Next

    ' If no files found then exit
    If i = -1 Then
    WScript.Echo "*WARNING* No files found to process."
    WScript.Quit
    End If

    ' Sort the files arrary by size in descending order
    SortArray arrFiles

    ' Process all files moving to new subfolders until done
    intFolderNumber = 0
    Do
    ' Start a new destination folder and create it (MUST NOT ALREADY EXIST)
    lngFolderSize = cMaxFolderSize
    intFolderNumber = intFolderNumber + 1
    strNextDir = strDestDir & "" & intFolderNumber & ""
    objFSO.CreateFolder strNextDir

    ' Move files to dest folder until full
    Do
    ' Look for the largest file left that will fit in remaining space
    intMoveFile = GetFileToMove(arrFiles, lngFolderSize)

    ' If we found another file to move then move it
    If intMoveFile <> -1 Then
    Dest:[" & intFolderNumber & "], Available:[" & lngFolderSize & "], File:[" & arrFiles(intMoveFile).strPath & "], Size:[" & arrFiles(intMoveFile).lngSize & "]."
    objFSO.MoveFile arrFiles(intMoveFile).strPath, strNextDir
    lngFolderSize = lngFolderSize - arrFiles(intMoveFile).lngSize
    arrFiles(intMoveFile).lngSize = -1
    End If
    Loop Until intMoveFile = -1

    ' Add player file
    objFSO.CopyFile strPlayer, strNextDir

    Loop Until AllFilesMoved(arrFiles)

    Function GetFileToMove(ByRef arrArray(), lngSize)
    ' Find next largest file to move that fits, -1 if none found
    Dim i
    GetFileToMove = -1
    For i = LBound(arrArray) To UBound(arrArray)
    If arrArray(i).lngSize <> -1 Then
    If arrArray(i).lngSize <= lngSize Then
    GetFileToMove = i
    End If
    Exit Function
    End If
    Next
    End Function

    Function AllFilesMoved(ByRef arrArray())
    ' See if all files have been moved
    Dim i
    AllFilesMoved = True
    For i = LBound(arrArray) To UBound(arrArray)
    If arrArray(i).lngSize <> -1 Then
    AllFilesMoved = False
    Exit Function
    End If
    Next
    End Function

    Sub SortArray(ByRef arrArray())
    ' Sort array of files by size, descending order (simple bubble sort)
    Dim i, j, intTemp
    For i = LBound(arrArray) to UBound(arrArray)
    For j = LBound(arrArray) to UBound(arrArray) - 1
    ' If arrArray(j).lngSize < arrArray(j + 1).lngSize Then
    If LCase(arrArray(j).strPath) > LCase(arrArray(j + 1).strPath) Then
    Set intTemp = arrArray(j + 1)
    Set arrArray(j + 1) = arrArray(j)
    Set arrArray(j) = intTemp
    Set intTemp = Nothing
    End If
    Next
    Next
    End Sub

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Featured


Click Here to Expand Forum to Full Width