“删除早于”batch file的文件

所以在做备份的工作中,我需要一个批处理脚本,它允许我删除指定目录中的文件,这些文件比3天更早。 这个脚本将被设置为一个计划任务,每天在指定的时间运行。

如果powershell是可以接受的(应该是,因为它默认启用Server 2008+)试试这个:

$numberOfDays = 3 $Now = Get-Date $TargetFolder = “C:\myoldfiles” $LastWrite = $Now.AddDays(-$numberOfDays) $Files = get-childitem $TargetFolder -include *.bak, *.x86 -recurse | Where {$_.LastWriteTime -le “$LastWrite”} foreach ($File in $Files) { write-host “Deleting File $File” -foregroundcolor “Red”; Remove-Item $File | out-null } 

在这里find 。

  forfiles -pc:\ pathtofiles \ -m * .rar -d -5 -c“cmd / c del @path” 

其中-5是要删除的文件的年龄(在这种情况下5天或更长)。 此脚本正在删除.rar文件 – 如果要删除任何文件types,请删除-m *.rar文件。

如果你坚持使用batch file,Robocopy.exe是你的答案。 它的快速(multithreading)和非常强大。 对于您的情况,您可以使用以下内容作为指导:

 :: Moves dir & files older than 3 days to i:\Destination :: Wildcards acceptable robocopy i:\Source\ i:\Destination\ /MOVE /MIR /MINAGE:3 /ETA :: Removes the destination tree rd /s /qi:\destination 

有一个很长的选项列表,请做robocopy /? 看到他们全部。 您甚至可以使用它来执行增量备份,计划,创build备份configuration文件等。

我喜欢使用DelEn.exe 。

Delen – DELete ENhanced – 是DEL的强化版本。 它支持扩展通配符和父目录,以及date,时间和大小filter。 文件可以从删除中排除。

你可以看看Horst Schaeffer的DelAge32:

http://home.mnet-online.de/horst.muc/wbat32.htm#top

 DelAge32 - ver. 2.3 (c) 2003-2008, Horst Schaeffer Deletes or moves files (path with file pattern) by age (number of days) Syntax: DelAge32 filespec age [options] Options: /created /accessed /modified (default) - file stamp used to evaluate age /includeRO - include read-only files /includeH - include hidden files /includeS - include system files /includeRHS -include read-only, hidden and system files /recurse - include subdirectories /subonly - /recurse excluding initial directory /rd - remove empty subdirectories /move path - move files to specified path /preview - list, but no action /quiet - no output 

你的命令可以像下面这样简单:

 delage32.exe c:\logdirectory\*.log 3 

我有这个命令作为一个计划任务运行。

这是我写的做你想做的powershell脚本 – 它也做得更多。 我用它清除日志和其他临时文件。

吹扫DEM-logs.cmd

 powershell.exe -command "& 'c:\purgelogs\purgelogs.ps1' -Filepath D:\SQL\backup\ -filemask *.bak -Maxdays 14 " 

purgelogs.ps1:

 Param ($filepath, $filemask, $maxdays, [switch]$recurse) if (($FilePath -eq $null) -or ($FileMask -eq $null) -or ($MaxDays -eq $null)) { write-host "Usage .\purgelogs.ps1 -filepath [Path] -filemask [Mask] -masdays [Max Days]" write-host " " write-host "Example: " write-host " .\purgelogs.ps1 -filepath c:\temp -filemask *.log -maxdays 30" break } if (Test-Path $FilePath) { $FilePath += "*" $Now = Get-Date $LastWrite = $Now.AddDays(-$MaxDays) write-host "Last write time " $LastWrite if ($recurse) { $Files = get-childitem $FilePath -include $FileMask -recurse | Where {$_.LastWriteTime -le "$LastWrite"} } else { $Files = get-childitem $FilePath -include $FileMask | Where {$_.LastWriteTime -le "$LastWrite"} } if ($Files -eq $null) { write-host "No matching files found" } else { foreach ($File in $Files) #You can add -whatif to see the consequence û Remove-item $File -Whatif { write-host "Deleting File $File" -foregroundcolor "Red"; Remove-Item $File | out-null } } } Else { Write-Host "The Folder $FilePath Does Not Exist!" } 

这对远程计算机不起作用。 pipe理员需要pipe理多台电脑。 下面是可以用来删除多个远程计算机中的文件夹而不必login到他们的脚本。

下面的脚本将删除超过15天的文件夹。 你可以改变$ days参数。

D $ \ Program Files(x86)\ Research In Motion \ BlackBerry Enterprise Server \ Logs是Blackberry Log文件夹的UNCpath。 您可以更改日志/文件夹所在的目录。

列出servers.txt文件中的所有服务器名称,并且应该位于与此脚本相同的目录中。

 cd C:\Scripts\Powershellscripts\deletefiles ----> change it to the directory you wanna out this script to $Days = "15" $Now = Get-Date $LastWrite = $Now.AddDays(-$days) $server = get-content servers.txt foreach ($node in $server) { get-childitem -recurse "\\$node\D$\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\Logs" | Where-Object {$_.LastWriteTime -le $LastWrite} | remove-item -recurse -force } 

将脚本保存为.ps1并运行它。 您可以通过batch file来安排它。 这样你就需要在脚本的开头添加Change Directory命令。

玩的开心。

作为替代方法:不要依靠查询文件系统来获取文件创build时间(并在多天内打到相同的文件,直到它们到期),可以在创build时将文件添加到您自己的索引中。 该索引可以像创builddate之后命名的文件一样简单,存储在已知位置,每行文件。

如果你有一个multithreading/多进程应用程序创build文件,那么你可能希望你的索引以更复杂的方式处理。

好处是你总是有一个相对简单处理的文件列表,在某个特定的日子里可以迭代,而不必一再提问文件系统的细节。

(这将依赖于应用程序和文件创build,由您pipe理,而不是由第三方pipe理)。