用批处理实现的删除特定时间以前的文件

使用for命令读取dir /tc /o-d /a的结果,可以分成4段,前两段为日期与时间,第3段为目录或文件大小,第4段为文件名或目录名。然后根据第1段和第2段与需要的时间进行比较,决定是否删除文件

@echo off
rem cd /d f:\temp
rem mDateTime格式: yyymmddHHmm
set mDateTime=200608161907
for /f "skip=4 tokens=1,2,3,4* delims=<>" %%i in ('dir /a /-c /tc /o-d') do call :proc %%i %%j %%k %%l
goto end

:proc
set aDate=%1
set aTime=%2
set aType=%3
set aFile=%4
set aDatetime=%aDate:~0,4%%aDate:~5,2%%aDate:~8,2%%aTime:~0,2%%aTime:~3,2%
if /i "%aDateTime%" lss "%mDateTime%" (if NOT "%aType%"=="DIR" attrib "%aFile%" -r -h -s && del "%aFile%")

:end

但上面会有点问题,主要是因为if不能做大的数字的比较,200608161907对if来说太大了。我们可以先比较日期,再比较时间,但if语句比较多,还是折中一下,采用两位年份:

rem mDateTime格式: ymmddHHmm
set mDateTime=0608161907
……
set aDatetime=%aDate:~2,2%%aDate:~5,2%%aDate:~8,2%%aTime:~0,2%%aTime:~3,2%

Windows2003有一个命令Forfiles,如: 
Forfiles /D -30 /C "cmd /c echo @fname 是30天前的。2000下可以把2003的Forfiles.exe文件拷过来用。

另外如果保留最近n个文件,就比较简单了,如,保留最近30个bak文件: 
for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i

批处理中,要把%i 改为%%i

(0)

相关推荐

  • 实现每个星期的每一天指定时间关机的dos/bat

    if not "%times%"=="" for %%i in (%times%) do (     at %%i /every:M,T,W,Th,F,S,Su shutdown -s ) 以上语句实现每个星期的每一天指定时间关机 如果要换成每个月的某几天,请改字母为数字,并用逗号分隔 以下代码没有错误检测语句,输入时间的时候务必按照指定格式输入 可以用在CMD窗口用at命令来查看计划任务

  • 在Windows主机上定时备份远程VPS(CentOS)数据的批处理

    不过折腾 VPS 之后,就不只是要备份 MySQL 了,一些独立的站点数据也是需要备份的. 如果有靠谱的第三方 Linux 主机或类似 Amazon 的云存储,那就简单多了,Linux - Linux 的备份很方便. 不过我想在自己的 Windows7 下每天/周运行一次备份,就有了这个小工具. 大概的想法如下: 使用 Putty 自带的 plink.exe 连接到 VPS 上,运行备份并退出登录: 接着使用 Putty 自带的 pscp.exe 将备份复制到本机: 添加一个计划任务,每天/周自

  • 定时检查网站是否掉线的批处理

    连日来,托管服务器每天老是掉线,重起一下又好了,似乎没有死机,不像是硬件的问题.怀疑有木马或病毒,但是找了几天没找到,没办法,还是先治治标吧,慢慢找吧.下面是写的批处理checktoreboot.bat,原理是定期每小时ping一次自己的域名,如果不通则重起机器. @echo 每小时检查主机是否能Ping通自己的域名,如果不能,则重新启动机器,如装防火墙过滤,请考虑其他办法,或开放ICMP协议 @echo 检查中...... @echo off echo execute-date:>>c:\c

  • Java调用DOS实现定时关机的实例

    复制代码 代码如下: public static void shutdown(){ System.out.print("请输入多少分钟后关机:");         Scanner scanner = new Scanner(System.in);         int minute = scanner.nextInt()*60;         Runtime runtime = Runtime.getRuntime();         String shutdown = &qu

  • 批处理 实现定时关机、注销、重启、锁定等功能

    复制代码 代码如下: @ECHO off TITLE greaterthanme-实现定时关机.注销.重启.锁定等功能.start CLS COLOR 1f rem 使用COLOR命令对控制台输出颜色进行更改 MODE con COLS=41 LINES=18 rem MODE语句为设定窗体的宽和高 set tm1=%time~0,2% set tm2=%time~3,2% set tm3=%time~6,2% ECHO %date% %tm1%点%tm2%分%tm3%秒 ECHO ======

  • bat定时自动关机,bat自动结束任务关闭程序,dos自动结束程序后关机

    自动结束程序 ntsd 是一条dos命令,功能是用于结束一些常规下结束不了的死进程.用法为打开cmd 后输入以下命令就可以结束进程:方法一:利用进程的PID结束进程命令格式:ntsd -c q -p pid 命令范例: ntsd -c q -p 1332 (结束explorer.exe进程)范例详解:explorer.exe的pid为1332,但是如何获取进程的pid呢?在CMD下输入TASKLIST就可以获取当前任务管理器所有进程的PID方法二:利用进程名结束进程命令格式:ntsd -c q

  • 如何利用DOS批处理实现定时关机操作详解

    一.批处理释义: 批处理(Batch),也称为批处理脚本.它是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,应用于DOS和Windows系统中.批处理文件的扩展名为bat. 目前比较常见的批处理包含两类:DOS批处理和PS批处理.PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本:而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本. 二.编写批处理文件: (1)新建一个文本文件,在里面写上DOS命令语句.然后选择另存为改文

  • 用bat实现定时执行任务的批处理文件

    @echo off set txt1=%date:~0,4% ::当前年 set txt2=%date:~5,2% ::当前月 set txt3=%date:~8,2% ::当前日 set txt4=%time:~0,2% ::当前小时 set txt5=%time:~3,2% ::当前分钟 set txt6=%time:~6,2% ::当前秒 set date=%txt1%%txt2%%txt3% set time=%txt4%%txt5%%txt6% echo ---------------

  • 可以设定的定时关机的批处理

    批处理定时关机.bat 复制代码 代码如下: @echo off mode con lines=25 title 定时关机 color 1f cls echo. echo. echo. echo. echo 时间使用24小时制(如2:15.12:00),可以输入多个时间点 echo. echo 多个时间点用空格分隔 echo. echo. echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ echo. set times= set /p times= 请输

  • 用批处理实现的删除特定时间以前的文件

    使用for命令读取dir /tc /o-d /a的结果,可以分成4段,前两段为日期与时间,第3段为目录或文件大小,第4段为文件名或目录名.然后根据第1段和第2段与需要的时间进行比较,决定是否删除文件 @echo off rem cd /d f:\temp rem mDateTime格式: yyymmddHHmm set mDateTime=200608161907 for /f "skip=4 tokens=1,2,3,4* delims=<>" %%i in ('dir 

  • Shell定时删除指定时间之前的文件

    最近世界杯来了,一直忙于工作和世界杯之间,都没有空来管管我的blog了,今天只能整个简单的小shell给大家了.公司要求删除一个月之前的备份文件,免得把硬盘给整爆了,上服务器看了下,居然都有3个月的备份没有清理了,还好是sql备份,不然硬盘空间早就满了. 下面是我的解决办法: 复制代码 代码如下: cat delbak.sh #!/bin/sh location="/root/sqlbak/" find $location -mtime +30 -type f |xargs rm -f

  • Mysql下自动删除指定时间以前的记录的操作方法

    关于Event:mysql5.1版本开始引进event概念.event既"时间触发器",与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 首先删除2天以前记录的SQL语句(webserver_monitormemory为表名,time为时间字段): delete From webserver_monitormemory where DATE(time) &

  • java集合类arraylist循环中删除特定元素的方法

    在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } } 上面这种方式会抛出如下异常: Exception in thread "main" java.lang.I

  • python删除特定文件的方法

    本文实例讲述了python删除特定文件的方法.分享给大家供大家参考.具体如下: #!/usr/bin/python # -*- coding: utf-8 -*- import os def del_files(path): for root , dirs, files in os.walk(path): for name in files: if name.endswith(".CR2"): os.remove(os.path.join(root, name)) print (&qu

  • JavaScrip数组删除特定元素的几种方法总结

    前言 可能一说到删除数组特定元素你估计不止一种方法可以实现,那么下面且来看看我总结的这几种方法,可能会对你有所帮助!话不多说了,来一起看看详细的介绍吧. 源数组 var arr = ["George", "John", "Thomas", "James", "Adrew", "Martin"]; 伪删除 什么是伪删除呢? 就是说将数组元素值设置为null; arr[ arr.indexO

  • 数组任意位置插入元素,删除特定元素的实例

    如下所示: $ary = array( array('t'=>1,'y'=>2), array('t'=>2,'y'=>9) ); $t = array_splice( $ary, 1,0,array(array('t'=>3,'y'=>10)) ); print_r($ary); 控制台输出: $ary = array( array('t'=>1,'y'=>2), array('t'=>3,'y'=>10), array('t'=>2,'

  • C语言之从字符数组中删除特定的字符

    从字符数组中删除特定的字符,即输入要删除的指定字符,利用for循环找到非指定字符,将非指定字符输出即可.以下为具体的实现方法: #include<stdio.h> int main() { char str[100],c; int j,k; printf("please input a string:"); gets(str); printf("\nEnter a character:"); c=getchar(); for(j=k=0;str[j]!=

  • 如何在Linux中的特定时间运行命令

    有一天,我使用 rsync 将大文件传输到局域网上的另一个系统.由于它是非常大的文件,大约需要 20 分钟才能完成.我不想再等了,我也不想按 CTRL+C 来终止这个过程.我只是想知道在 Linux 操作系统中是否有简单的方法可以在特定的时间运行一个命令,并且一旦超时就自动杀死它 -- 因此有了这篇文章.请继续阅读. 在 Linux 中在特定时间运行命令 我们可以用两种方法做到这一点. 方法 1 - 使用 timeout 命令 最常用的方法是使用 timeout 命令.对于那些不知道的人来说,t

  • Redis如何优雅的删除特定前缀key

    前言 还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹! Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案 redis-cli --raw keys "ops-coffee-*" | xargs redis-cli del 直接在linux下通过redis的keys命令匹配到所有的key,然后调用系统命令xargs来删除,看似非常完美,实则风险巨大 因为Redis的单线程服务模式,命令keys

随机推荐