windows用批处理文件删除n天前的文件
来源:互联网 发布:fm2016巨星数据库 编辑:程序博客网 时间:2024/06/10 12:36
如果操作系统是 Windows Server 2003 那就好办了,因为它有一个forfiles命令能够查找满足指定条件的文件,下面是这个命令的用法。
forfiles /p <目标目录名> /d <天数> /c <执行的命令>
看看列出的三个参数都有什么用处:
/p 指定了要在哪个目录里查找文件,默认是当前工作目录,注意不能在目录名后面加斜杠。
/d 指定一个日期或天数,用于比较文件的最后修改日期是否符合条件。
/c 对每个找到的文件执行的命令。
例1.要把在C盘根目录下最后修改日期大于或等于2007年7月1日的文件复制到D盘根目录下:
forfiles /p "c:" /d "2007-7-1" /c "cmd /c copy @path d:\"
例2.删除在C盘backup目录下最后修改日期在10天前的文件:
forfiles /p "c:\backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"
看了上面的例子,觉得在 Windows Server 2003 下面要删除老文件很简单吧。
但如果操作系统是 Windows 2000/XP 就比较麻烦,因为它们没有forfiles命令,只能靠自己写批处理来实现了。
下面是我写的批处理文件内容:
@echo off
rem ******************************
rem * 按时间删除文件目录的批处理 *
rem ******************************
rem 设置临时目录的路径
set tempDir=%tmp%\remove_%date:~0,10%
if not exist %tempDir% md %tempDir%
rem 设置处理日期的脚本文件的路径
set scriptFile=%tempDir%\get_date.vbs
rem 获得要保留的天数
set days=%~1
if "%days%" == "" goto printUsage
rem 获得目标目录的路径
set dirPath=%~2
if "%dirPath%" == "" set dirPath=.
rem 获得要操作的文件形式
set fileSpec=%~3
if "%fileSpec%" == "" set fileSpec=*.*
rem 生成计算日期的脚本文件并获得删除的截止日期
echo d=date()-%1 > %scriptFile%
echo s=right("0000" ^& year(d),4) ^& "-" ^& right("00" ^& month(d),2) ^& "-" ^& right("00" ^& day(d),2) >> %scriptFile%
echo wscript.echo s >> %scriptFile%
for /f %%i in ('cscript /nologo %scriptFile%') do set lastDate=%%i
rem 处理目标目录里的每个对象
for /f "tokens=1,2,3* delims=<> " %%i in ('dir "%dirPath%\%fileSpec%" /a /-c /tc') do call :proc "%%i" "%%j" "%%k" "%%l"
goto :done
rem 处理目标目录里对象的过程
:proc
rem 获得对象的创建日期并判断是否为有效格式
set fileDate=%~1
echo %fileDate% | findstr "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" > nul
if errorlevel 1 goto end
rem 获得对象的类型
set fileType=%~3
if "%fileType%" == "" goto end
rem 获得对象的名称
set fileName=%~4
if "%fileName%" == "" goto end
if "%fileName%" == "." goto end
if "%fileName%" == ".." goto end
if "%fileName%" == "字节" goto end
if "%fileName%" == "可用字节" goto end
rem 判断对象日期是否小于或等于删除的截止日期
if "%fileDate:~0,10%" leq "%lastDate%" (
echo deleting "%fileName%" ...
if "%fileType%" == "DIR" ( rd /s /q "%dirPath%\%fileName%" ) else ( del /q /f "%dirPath%\%fileName%" )
)
goto end
:error
echo An error occurred during backuping.
:done
rd /s /q %tempDir%
goto end
:printUsage
echo Usage: %0 ^<Days^> [Work directory] [Target file specification (can include wildcards)]
goto end
:end
这个批处理的语句很多,我表达能力有限,懒得一一解释了。
主要是利用Windows的脚本功能来计算要删除文件的截止日期,然后for加dir命令来提取文件的日期进行判断。
关于forfiles和for的详细信息,可以在Windows的帮助与支持中找到
- windows用批处理文件删除n天前的文件
- windows批处理文件删除n天前的文件
- windows中用批处理文件删除n天前的文件
- 用批处理文件删除n天前的文件
- 用批处理文件删除n天前的文件
- 用批处理文件删除n天前的文件(轉)
- 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件
- 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件_DOS/BAT
- 用批处理文件删除n天前的文件&&用批处理实现的保留最近的n个文件 最简单方法
- Windows 下,命令行删除N天前的文件
- Windows下如何删除N天前的归档文件
- 删除N天前的日志文件
- linux 删除N天前的文件
- bat 删除n天前的文件
- Linux 删除N天前的文件
- 删除N天前的文件
- linux 删除N天前的文件
- Windows下强制删除文件的批处理文件
- EasyAR-(1)-导入Unity
- NEFU OJ8 二倍的问题
- error C3861: “getpid”: 找不到标识符
- 集成百度地图,看看就好
- 深度 | 如何掌握Facebook自动人脸识别技术?这篇文章为你提供生动指南
- windows用批处理文件删除n天前的文件
- IIS站点配置问题汇总
- Java实现文件监控之二
- WebService(2)—WebService的相关概念(WSDL、SOAP、SEI、CXF)
- 设计模式之状态模式
- hdu1693Eat the Trees
- 函数调试的反汇编分析
- 比较实用的网站(持续更新中)
- Elasticsearch2.4.X 搜索引擎框架 安装配置