批处理如何实现删除当前目录内最近修改时间3天以外的所有文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理如何实现删除当前目录内最近修改时间3天以外的所有文件?相关的知识,希望对你有一定的参考价值。

现在碰到这么个问题,有个备份目录下有许多子目录,子目录都是对应不同的账号,每个子目录下还有不少文件,但都是每天的备份,可子目录太多,备份只要留3天的就够了,每次删都太麻烦,望有能人可以解惑下。批处理实在小白

第二行设置保留文件数量,每天一个文件就设置为3,每天大约十个文件就设置为30以此类推
第三行设置备份文件后缀,本批以txt为例
为保证数据安全本批只显示删除命令不执行,核对无误后把倒数第二行前面的del删除后运行即可。
@echo off
set k=3
set hz=txt
pushd r:\back
for /d %%i in (*) do (
echo %%i
for /f "skip=%k%" %%j in ('dir/b/o-d %%i\*.%hz%') do (
echo del "%%~dpnxj"))
pause
参考技术A 不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
<# :
cls&echo off&mode con lines=5000
rem 查找并删除当前目录下修改时间在指定天数以前的文件
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$ago=-3;
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$agodate=(get-date).AddDays($ago).toString('yyyy-MM-dd');
$files=@(dir -liter $path -recurse|?($self.Name -ne $_.Name) -and ($_ -is [System.IO.FileInfo])|sort $_.LastWriteTime -Descending);
for($i=0;$i -lt $files.length;$i++)
$wt=$files[$i].LastWriteTime.toString('yyyy-MM-dd');
if($wt -le $agodate)'['+$wt+']'+$files[$i].FullName.Substring($path.length);
参考技术B 只看修改时间吗,还是还需要看别的什么属性?追问

嗯,只看修改时间,或者创建时间,由于这些文件不是最近几天的,至少是2个月前的,所以没法以现在时间为准设置参数,很多命令我记得都是可以把现在时间往前数几天的文件筛出来,但眼前这个情况不行。

追答

可帮写工具实现 私信

shell删除文件夹脚本怎么写?,保留2天内的文件夹,2天以前的是直接删除,每周二、四、六删一次

文件夹是备份的,名称以日期时间命名。例:2012031920、2012031955等等

1、删除可以用这样的方式:
rm -rf $(find ./ -maxdepth 1 -type d -mtime +2)

说明:
./:可修改为你需要的路径;
-maxdepth 1:为你搜索路径的最大深度,以你的需求来讲,只需要当前目录处理即可,所以参数可以为1;
-type d:表示只搜索文件夹,如你需要搜索文件,可以不要此参数;
-mtime +2:表示>=2天前修改的记录。
综上,find语句返回的值为:搜索当前目录下,两天前修改的文件夹。然后将该返回值给rm -rf做参数,即强制删除这些文件夹。

2、定时任务可以用cron,设定每周二、四、六执行一次以上的shell指令即可。
参考技术A 你说保留两天的文件,你周二,周四删除。周二到周四也就两天。本回答被提问者采纳

以上是关于批处理如何实现删除当前目录内最近修改时间3天以外的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何查找并删除/home目录下近两天生成的文件

shell删除文件夹脚本怎么写?,保留2天内的文件夹,2天以前的是直接删除,每周二、四、六删一次

linux命令 find的应用

Unix命令行:如何获取最近30天修改文件的总大小

批处理 提取子目录下所有文件到当前目录

使用批处理删除除一个以外的所有文件夹