请问:如何批处理删除文件夹及其所有子文件夹下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命求助,如何删除文件夹和子文件夹中某个类型以外的所有文件。