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

0s7z1bwu  于 2023-02-20  发布在  Windows
关注(0)|答案(2)|浏览(181)

我需要一个脚本,最好是Windows服务器的vbscript,它将在一个文件夹中的文件存档到另一个文件夹。说从\\folder1\\\folder1\archive\
这些文件的扩展名为.doc.xls
而且我只想移动超过30天的文件。
有没有简单的方法可以做到这一点?

wn9m85ua

wn9m85ua1#

既然你用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

由于源目录路径(\\folder1\)使用的语法,我认为它是由UNC路径给出的,所以我使用pushd命令,它理解这种情况,将其Map到它创建的临时驱动器,并将当前工作目录更改为该驱动器的根目录。
forfiles命令能够枚举给定的目录(树),并遍历满足特定掩码和修改日期(年龄)的所有项。由于forfiles只支持单个掩码,因此我只使用了两次。
最后的popd命令将删除由pushd创建的临时驱动器。
有关每个使用的命令的详细信息,请在命令提示符下键入该命令,然后键入/?

2w3rbyxf

2w3rbyxf2#

下面的代码可以做所需的。我只是在这里添加注解来解释这里的代码。

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

相关问题