什么是好的 Windows 命令行选项,用于删除给定文件夹中超过(n)天的所有文件?
还要注意,这些文件可能有数千个,因此forfiles
使用 shellcmd
并不是一个好主意……除非你喜欢生成数千个命令 shell。我认为这是一种非常恶劣的黑客行为,所以让我们看看我们是否可以做得更好!
理想情况下,某些内容应内置于(或易于安装于)Windows Server 2008 中。
答案1
我又看了看周围找到了 powershell 方法:
从指定文件夹中删除所有超过 8 天的文件(带预览)
dir |? {$_.CreationTime -lt (get-date).AddDays(-8)} | del -whatif
(删除 -whatif 即可实现)
答案2
喜欢 Jeff 的 PowerShell 命令,但对于没有 PowerShell 的 Windows 机器的替代 vbs 解决方案,您可以尝试以下操作。
另存为<filename>.vbs
并执行:
<filename>.vbs <target_dir> <NoDaysSinceModified> [Action]
第三个参数是可选的。如果没有它,将列出[Action]
早于的文件。如果设置为,它将删除早于的文件<NoDaysSinceModified>
D
<NoDaysSinceModified>
例子
PurgeOldFiles.vbs "c:\Log Files" 8
将要列表所有文件c:\Log Files
超过 8 天
PurgeOldFiles.vbs "c:\Log Files" 8 D
将要删除所有文件c:\Log Files
超过 8 天
注:这是 Haidong Ji 的剧本的修改版SQLServerCentral.com
Option Explicit
on error resume next
Dim oFSO
Dim sDirectoryPath
Dim oFolder
Dim oFileCollection
Dim oFile
Dim iDaysOld
Dim fAction
sDirectoryPath = WScript.Arguments.Item(0)
iDaysOld = WScript.Arguments.Item(1)
fAction = WScript.Arguments.Item(2)
Set oFSO = CreateObject("Scripting.FileSystemObject")
set oFolder = oFSO.GetFolder(sDirectoryPath)
set oFileCollection = oFolder.Files
If UCase(fAction) = "D" Then
'Walk through each file in this folder collection.
'If it is older than iDaysOld, then delete it.
For each oFile in oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
oFile.Delete(True)
End If
Next
else
'Displays Each file in the dir older than iDaysOld
For each oFile in oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
Wscript.Echo oFile.Name & " " & oFile.DateLastModified
End If
Next
End If
'Clean up
Set oFSO = Nothing
Set oFolder = Nothing
Set oFileCollection = Nothing
Set oFile = Nothing
Set fAction = Nothing
答案3
不是真正的命令行,但我喜欢使用LINQPad作为 C# 脚本主机:
这给了我一个使用命令行 C# 脚本编写 vbs 文件的想法)
var files = from f in Directory.GetFiles(@"D:\temp", "*.*", SearchOption.AllDirectories)
where File.GetLastWriteTime(f) < DateTime.Today.AddDays(-8)
select f;
foreach(var f in files)
File.Delete(f);
答案4
使用 cygwin 的(或其他替代)“find”命令可以实现类似的效果。但这需要您安装 cygwin 或手头有便携版本。