请问:如何批处理删除文件夹及其所有子文件夹下N天前所有文件?

如题所述

文件夹里面的某一个文件当前时间被修改过,这个文件夹的修改时间就会变成当前时间.
以删除30天以前的文件夹为例.如果一个文件夹的最后时间都是30天以前.
那么在30天以内该文件夹下的所有文件都没有被修改过.
而一个文件夹如果不在30天以前,那么也可能文件夹下的某些文件是在30天以前的.
根据这个思路.先删除30天以前的文件夹.
再删除30天以内文件夹下所有30天以前的文件.
那么就结果就如下:
forfiles -D -30 /M * /C "cmd /c rd @file /s /q"
forfiles -D -30 /S /M * /C "cmd /c del @path /s /q"
两行批处理即可搞定
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-01
"N天前"是依据什么日期做判断?修改日期?创建日期?
不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI
<# :
cls
@echo off
rem 删除指定目录里及其子文件夹里的修改日期在指定天数之前的文件
mode con lines=5000
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
#>
$days=-3;
$folder="D:\xxx\指定文件夹";

$self=get-item -liter $args[0];
if(-not (test-path -liter $folder)){write-host ('"'+$folder+'" not found');exit;};
$agodate=(get-date).adddays($days).toString('yyyy-MM-dd');
write-host ('界定日期='+$agodate);
$files=@(dir -liter $folder -recurse|?{($_.FullName -ne $self.FullName) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
$dt=$files[$i].LastWriteTime.toString('yyyy-MM-dd');
if($dt -lt $agodate){'['+$dt+']'+$files[$i].FullName;}
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网