用于将超过 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
Windows Script to move files older than 30 days with a specific extension to another folder
提问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 .doc
and .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 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.
由于您用于源目录路径 ( \\folder1\
)的语法,我想它是由 UNC 路径给出的。所以我使用pushd
理解这种情况的命令,将其映射到它创建的临时驱动器并将当前工作目录更改为该驱动器的根目录。
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.
该forfiles
命令能够枚举给定目录(树)并遍历满足特定掩码和修改日期(年龄)的所有项目。由于forfiles
仅支持单个掩码,因此我只需使用它两次。
The popd
command 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