Windows Script to move files older than 30 days wi

2020-07-17 15:48发布

问题:

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?

回答1:

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 /?.



回答2:

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