Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows Script to move files older than 30 days with a specific extension to another folder

I am in need of a script preferably a vbscript for a Windows Server which will archive files in a folder to another folder. Say from \\folder1\ to \\folder1\archive\

The files have the extensions of .doc and .xls

But also I only want to move files older than 30 days.

Is there a simple way to do this?

like image 375
Ralluhb Avatar asked Nov 05 '15 09:11

Ralluhb


People also ask

How do I move all files from one folder to another using the command line?

Highlight the files you want to move. Press the keyboard shortcut Command + C . Move to the location you want to move the files and press Option + Command + V to move the files.

Can you use script to copy files from one folder to another?

The batch script, also known as batch file, actually refers to a list of several commands; whenever you double-click the file, the commands will be executed. If you want to copy files or folders from one folder to another automatically, creating a batch script is a nice choice.


2 Answers

Since you tagged your question with batch-file, I suppose you are accepting batch file solutions too.
Here you are:

pushd \\folder1
forfiles /M *.doc /D -30 /C "cmd /C if @isdir==FALSE move @file .\archive\"
forfiles /M *.xls /D -30 /C "cmd /C if @isdir==FALSE move @file .\archive\"
popd

Due to the syntax you used for the source directory path (\\folder1\) I suppose it is given by a UNC path. So I use the pushd command which understands such, maps it to a temporary drive it creates and changes the current working directory to the root of that drive.

The forfiles command is capable of enumerating a given directory (tree) and iterates through all items that meet a certain mask and modification date (age). Since forfiles supports a single mask only, I simply use it twice.

The popd command at the end removes that temporary drive which has been created by pushd.

For more details about each used command, type it into the command prompt, followed by /?.

like image 185
aschipfl Avatar answered Sep 21 '22 01:09

aschipfl


Below code can do the required.I just added comments here to explain the code here.

Option Explicit 
On Error Resume Next 
Dim oFSO, oFolder, sSrcDirectoryPath, sDstDirectoryPath
Dim oFileCollection, oFile, sDir 
Dim iDaysOld 

sSrcDirectoryPath = "C:\folder1" 'Source folder location
sDstDirectoryPath = "C:\folder1\archive" ' archieve folder location
iDaysOld = 30

Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oFolder = oFSO.GetFolder(sSrcDirectoryPath) 
Set oFileCollection = oFolder.Files 

For each oFile in oFileCollection
    'Change the code here if any other file extension also required to be archieved.
    If (LCase(Right(Cstr(oFile.Name), 3)) = "doc" Or LCase(Right(Cstr(oFile.Name), 3)) = "xls") Then
        If (oFile.DateLastModified < (Date() - iDaysOld)) Then
        oFile.Move(sDstDirectoryPath & "\" & oFile.Name)
        End If 
    End If   
Next 

Set oFSO = Nothing 
Set oFolder = Nothing 
Set oFileCollection = Nothing 
Set oFile = Nothing
like image 39
Suraj Raj Bhandari Avatar answered Sep 20 '22 01:09

Suraj Raj Bhandari