Moving files with VBScript
Copying files from one place to another can be a pain when it needs to be done repeatedly, for example when a series of output files like letters or grabbing the latest test results, especially if you’ve got to fish them out of a folder with a lot in it, this is where a quick VBScript can work wonders. As is so often the case this was adapted from code found online (there’s no need to re-invent the wheel) from Tester101 on StackOverflow.
There are a few tweaks though, the below will take in a list of files to transfer from a source folder to a specific destination and it will skip any files that don’t exist. it could easily be adapted to take in an array of output folders or write a log to a new text file but those can be enhancements for another day, here’s the script. To use it save the code into a text file and set the extension to be .vbs:
Dim sourceFolder, destFolder, fileArr
sourceFolder = "C:\Users\ThisUser\Documents\Source\"
destFolder = "F:\Work\Subject\Research\"
' Files to copy across
fileArr = Array("FirstSubjectPaper.docx"_
,"Thesis.docx")
copyFiles sourceFolder, destFolder, fileArr
sub copyFiles(sourceFolder, destFolder, fileArr)
Set fso = CreateObject("Scripting.FileSystemObject")
for i = 0 to ubound(fileArr)
Dim SourceFile
Dim DestinationFile
SourceFile = sourceFolder & fileArr(i)
DestinationFile = destFolder & fileArr(i)
' Check to see if source file exists
If fso.FileExists(SourceFile) Then
'Check to see if the file already exists in the destination folder
If fso.FileExists(DestinationFile) Then
'Check to see if the file is read-only
If Not fso.GetFile(DestinationFile).Attributes And 1 Then
'The file exists and is not read-only. Safe to replace the file.
fso.CopyFile SourceFile, DestinationFile, True
msgbox "Copied: " & fileArr(i), 0, "Success"
Else
'The file exists and is read-only.
'Remove the read-only attribute
fso.GetFile(DestinationFile).Attributes = fso.GetFile(DestinationFile).Attributes - 1
'Replace the file
fso.CopyFile SourceFile, DestinationFile, True
'Reapply the read-only attribute
fso.GetFile(DestinationFile).Attributes = fso.GetFile(DestinationFile).Attributes + 1
msgbox "Copied: " & fileArr(i), 0, "Success"
End If
Else
'The file does not exist in the destination folder. Safe to copy file to this folder.
fso.CopyFile SourceFile, DestinationFile, True
msgbox "Copied: " & fileArr(i), 0, "Success"
End If
Else
'The source file does not exist don't do mutch
msgbox "Source file doesn't exist: " & fileArr(i) & vbNewLine & "Skipping.." , 0, "Ah.."
End If
next
Set fso = Nothing
end sub
