用于将超过 30 天且具有特定扩展名的文件移动到另一个文件夹的 Windows 脚本

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33541375/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 19:19:30  来源:igfitidea点击:

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

windowsbatch-filevbscript

提问by Ralluhb

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\

我需要一个脚本,最好是用于 Windows Server 的 vbscript,它将文件夹中的文件存档到另一个文件夹。说从\\folder1\\\folder1\archive\

The files have the extensions of .docand .xls

这些文件的扩展名为.doc.xls

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

但我也只想移动超过 30 天的文件。

Is there a simple way to do this?

有没有一种简单的方法可以做到这一点?

回答by aschipfl

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

由于您用batch-file标记了您的问题,我想您也接受了批处理文件解决方案。
这个给你:

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 pushdcommand which understands such, maps it to a temporary drive it creates and changes the current working directory to the root of that drive.

由于您用于源目录路径 ( \\folder1\)的语法,我想它是由 UNC 路径给出的。所以我使用pushd理解这种情况的命令,将其映射到它创建的临时驱动器并将当前工作目录更改为该驱动器的根目录。

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

forfiles命令能够枚举给定目录(树)并遍历满足特定掩码和修改日期(年龄)的所有项目。由于forfiles仅支持单个掩码,因此我只需使用它两次。

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

最后的popd命令删除由pushd.

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

有关每个使用的命令的更多详细信息,请在命令提示符中键入它,然后输入/?.

回答by Suraj Raj Bhandari

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