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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问:如何批处理删除文件夹及其所有子文件夹下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"
两行批处理即可搞定
参考技术A "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;

Windows自动删除n天前的文件的批处理脚本

数据库每天备份文件,然而只需要保留七天的备份即可,编写一个批处理脚本文件自动删除七天前的文件并设置定时任务

自动删除文件需要用到forfiles命令

forfiles参数:
/p 指定的路径
/s 包括子目录
/m 查找的文件名掩码
/d 指定日期,有绝对日期和相对日期, 此处-7指当前日期 的7天前  
/c 运行的命令行   表示为每个文件执行的命令。命令字符串应该用双引号括起来。

默认命令是 "cmd /c echo @file"。下列变量 可以用在命令字符串中:

@file    - 返回文件名。
@fname   - 返回不带扩展名的文件名。
@ext     - 只返回文件的扩展。
@path    - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir   - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
@fsize   - 以字节为单位返回文件大小。
@fdate   - 返回文件上一次修改的日期。
@ftime   - 返回文件上一次修改的时间。


新建一个记事本文件,输入下面的命令,将文件名命名为“删除7天前备份文件.bat”,注意要删除文件所在的路径

@echo off  #需要密码
forfiles /p "C:\autoscpfile\data" /s /m *.bak /d -7 /c "cmd /c del /f @path"
forfiles /p "C:\autoscpfile\log" /s /m *.txt /d -7 /c "cmd /c del /f @path"

脚本文件写好后设置定时任务

在Windows server 2003上打开任务计划

“开始”—>“所有程序”—>“附件”—>“系统工具”—>“任务计划”

空白处右键单击新建计划任务,将任务命名为“删除7天前备份”,双击该任务

选择浏览,找到批处理文件的路径,设置密码,密码是执行该脚本的用户的登录密码

技术分享

设置脚本执行的时间,每天3:00执行该脚本,然后点击应用,确定

技术分享


在Windows server 2008 R2上打开任务计划

“开始”—>“管理工具”—>“任务计划程序”

右侧操作栏,点击创建任务

技术分享

给任务命名,选择配置,使用最高权限运行

技术分享

选择触发器,新建

技术分享

选择新建触发器,设置任务执行的时间,确定

技术分享

选择操作,新建

技术分享

点击浏览,选择要执行的脚本路径,起始于选项填写脚本路径,然后确定

技术分享




以上是关于请问:如何批处理删除文件夹及其所有子文件夹下N天前所有文件?的主要内容,如果未能解决你的问题,请参考以下文章

怎样使用bat任务删除7天前的文件夹及其里面的文件

bat命求助,如何删除文件夹和子文件夹中某个类型以外的所有文件。

dos 下如何删除某个目录下的创建时间为5天前的文件夹?用批处理文件

windows下自动删除n天前的文件

删除n天前的所有目录和文件 - linux命令

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