用批处理文件删除n天前的文件(转)+XP不支持forFiles命令解决
- 博客分类:
- 技术杂绘
用批处理文件删除n天前的文件(转)+XP不支持forFiles命令解决
2010年08月10日
公司服务器用来备份数据的硬盘过段时间就会被备份文件占满,弄得我老是要登录到服务器去手工删除那些老的文件,有时忘记了就会导致硬盘空间不足而无法备份。
因为只要保留最近几天的备份,如果可以做一个批处理让系统自动删除老备份文件就好了,但是Windows的命令行和Linux的Shell比起来功能差了很多,到底行不行我自己也不清楚。
于是上网查了一下各位大虾发的帖子,再经过自己的摸索和尝试,发现只要花点功夫还是能实现这个功能的。
下面来看看我的实现方法。
如果操作系统是 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 ^ [Work directory] [Target file specification (can include wildcards)]
goto end
:end 这个批处理的语句很多,我表达能力有限,懒得一一解释了。
主要是利用Windows的脚本功能来计算要删除文件的截止日期,然后for加dir命令来提取文件的日期进行判断。
关于forfiles和for的详细信息,可以在Windows的帮助与支持中找到。
附: 在 WINDOWS 下, 若是要将某些档案做什
发表评论
-
VisualStudio2003建立的asp.net应用,迁移到VisualStudio2005之后不能运行及debug
2012-01-20 01:38 725VisualStudio2003建立的asp.net应用,迁移 ... -
为Silverlight应用程序配置IIS
2012-01-20 01:38 674为Silverlight应用程序配置IIS 2010年10月 ... -
利用批处理检查服务器宕机,批处理检查服务器端口
2012-01-20 01:38 873利用批处理检查服务器宕机,批处理检查服务器端口 2010年0 ... -
VB动态添加执行代码完整版(三)
2012-01-20 01:37 877VB动态添加执行代码完整版(三) 2010年08月14日 ... -
bmp保存
2012-01-19 09:28 465bmp保存 2010年10月24日 CFileDialo ... -
使用jpeglib,实现jpg和bmp互转
2012-01-19 09:27 2243使用jpeglib,实现jpg和bmp互转 2011年10月 ... -
BMP文件操作方法(一个月研究出来的)
2012-01-19 09:27 675BMP文件操作方法(一个月研究出来的) 2011年07月20 ... -
BMP位图文件的存储格式3
2012-01-19 09:27 734BMP位图文件的存储格式3 2011年06月18日 1. ... -
(转)BMP文件格式详解(BMP file format)
2012-01-19 09:27 561(转)BMP文件格式详解(BMP ... -
Android 支持多屏幕机制
2012-01-17 02:02 600Android 支持多屏幕机制 ... -
Ios(自己用)
2012-01-17 02:02 578Ios(自己用) 2011年08月22日 How To ... -
各种计算机知识和技术大全
2012-01-17 02:02 875各种计算机知识和技术大全 2011年04月13日 ... -
Android学习资料汇总(不断更新中2011年6月29日)
2012-01-17 02:02 610Android学习资料汇总(不断更新中2011年6月29日) ... -
强帖集锦(主要学习网站)
2012-01-17 02:02 779强帖集锦(主要学习网站) 2011年10月27日 htt ... -
socket性能优化(上)
2012-01-15 21:17 488socket性能优化(上) 2012 ... -
诬凹沃官燠喷闳
2012-01-15 21:17 611诬凹沃官燠喷闳 2012年01月06日 U辙趴“ ... -
是傻频日志呵阡啄凛仄
2012-01-15 21:17 502是傻频日志呵阡啄凛仄 2012年01月09日 刘 ... -
???
2012-01-15 21:16 459??? 2012年01月10日 ... -
我的日志
2012-01-15 21:16 528我的日志 21小时前 ...
相关推荐
forfiles 自动删除7天前文件 参见 @echo off ::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。 ::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。 ::本例需要Win2003/Vista/...
forfiles 批处理删除文件
批处理forFiles.exe,windows server 2003中的forFiles,xp不支持forFiles命令,把这个文件放在C:\WINDOWS\system32目录下,xp即可支持forFiles命令
forfiles大全支持xp/win7X64/win7X86 把forfiles.exe拷贝到C:\WINDOWS\system32下就可
WINDOWS批处理删除文件夹,子文件 ,按日期筛选。非常方便
主要介绍了使用forfiles命令批量删除N天前文件,因为最近备份的文件都是保存一个月的就可以了,所以就需要删除30天以前的文件,服务器上软件不太信任,用bat挺方便的,需要的朋友可以参考下
删除目录下空文件夹批处理文件,亲测有效!只传优质资源~~~
虽然有很多种方式可以解决这个问题,但是我们可以用T-SQL代码来处理这个文件删除过程。我用xp_cmdshell命令和FORFILES命令来处理类似于你所列出的过程。可以从Microsoft TechNet中获得FORFILES的可靠信息,但是在这...
forfiles文件。可用于xp中。拷贝至设置环境变量的目录下,在xp的命令提示符中即可运用。
forfiles.exe及forfiles用法
主要介绍了bat使用forfiles自动批量删除过期文件,需要的朋友可以参考下
清理无用的PDF文件批处理 使用forfiles 使用时候需要编辑一下目录,需要改天数改一下。 默认是备份到其他盘,隐藏一条个如果不需要备份改成删除也行
NULL 博文链接:https://laibulai.iteye.com/blog/1409467
forfiles用法详解,方便、实用。forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]]。
批处理备份脚本-备份文件夹并采用当前时间命名, 全量备份,每次备份产生一个新的文件夹(文件夹名称使用当前时间命名),配合定时任务,可间接性实现版本库效果
在xp/2000上我试过了,只是格式与2003版本的稍有不同,而且有些参数要注意大小写。(如forfiles -pc:\ -m*.* -s -d-3 -c"cmd /c del @FILE")
Oracle 导入导出命令集-0.000001-0.000001