Issue with MoveFile method to overwrite file in Destination in vbscript?

Like mentioned before, MoveFile cannot overwrite existing File. But you can create your own Function:

Function MoveFile(source, target)
  Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")

  fso.CopyFile source, target, True
  fso.DeleteFile source
End Function

And then call it like:

MoveFile ObjFile.Path, archiveTo & "\" & yearValue & "\" & monthValue & "\" & ObjFile.Name

Examples above look good, but there is a risk that the source and destination paths may be the same. Then the file overrides itself, and nothing seems to be actually copied. So if you delete the source file after that, then the file can be lost! So what I use is the function below (which I believe is more safe):

Public Function GrMoveFile(ByVal sMoveFrom As String, ByVal sMoveTo As String, Optional ByVal fOverride As Boolean = False) As Variant

' This function allows moving file between different drives or servers with possible overriding
' author: Tomasz Kubiak
' [email protected]
'
' RETURNS:
'   - true (if moving successfull)
'   - error description (otherwise)
' ARGUMENTS:
'   - sMoveFrom - source file path
'   - sMoveTo - destination file path
'   - fOverride - allow for overriding (false by default)

    Dim FSO As New Scripting.FileSystemObject   ' File system object - requires reference to Microsoft Scripting Library (Tools -> References)
    Dim OrigFileAttr As VbFileAttribute         ' Holds attribute of the destination file

On Error GoTo EH

    ' if overriding is allowed:
    If fOverride Then

        ' It's necessary to prevent the destination file from deleting,
        ' in case of the source path and destination path points to the same file
        ' (it's possible e.g. when the network location is mapped as a drive).
        ' So the solution is to lock the file by setting fileattribute to ReadOnly

        ' Before locking file let's remember the original state of the destination file
        OrigFileAttr = GetAttr(sMoveFrom)

        ' Unlock file before copy
        SetAttr sMoveFrom, vbNormal

        ' Original FSO MoveFile method does not allow overriding, so we copy the file at first
        FSO.CopyFile source:=sMoveFrom, destination:=sMoveTo, overwritefiles:=True

        ' Set destination file attribute to read-only to prevent deletion
        SetAttr sMoveTo, vbReadOnly

On Error Resume Next
        ' Theoretically the condition below should not be required, because FSO.delete method with
        ' attribut "force" set to false shouldn't allow for deleting "Read-only files".
        ' But in practice, when you have a file located on the server location, it appeared to not
        ' work properly and delete also RO-files, so i've introduced that condition
        If GetAttr(sMoveFrom) <> vbReadOnly Then
            ' Try to delete source file
            FSO.DeleteFile sMoveFrom, False
        End If

        'restore previous file attribute
        SetAttr sMoveTo, OrigFileAttr
On Error GoTo EH

    ' if overriding is NOT allowed:
    Else
        'move using regular move method (does not allow override)
        FSO.MoveFile source:=sMoveFrom, destination:=sMoveTo
    End If

    'pReleaseFolder

    ' Moving succesfull, let function return true
    GrMoveFile = True
    Exit Function

'Error handler
EH:
    'pReleaseFolder

    ' An error occured, return error description
    GrMoveFile = Err.Description
End Function


Unfortunately, the VBScript MoveFile method works only when the target file does not exist. It can't overwrite such file when exists, just throw error.

So the only option is to use CopyFile (which does have option to overwrite) then DeleteFile:

fso.CopyFile ObjFile.Path, archiveTo & "\" & yearValue & "\" & monthValue & "\" & ObjFile.Name, True
fso.DeleteFile ObjFile.Path