用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

核心代码:

@echo off
:: by oicu#lsxk.org
:: 15:17 2011-1-13

:: 如果只是删除指定日期或N天前修改的文件,用forfiles即可
FORFILES /P "C:\测试目录" /S /M *.log /D -3 /C "cmd /c if @isdir==FALSE echo del @file"
:: 指定日期(包含)前修改的文件:/D -yyyy/mm/dd

:: 以下是流水账
:: 使用限制:控制面板里设定日期格式为中文(中国)
:: 只有dir /tc才能查看到文件创建时间,默认dir都是dir /tw
:: 为了取出创建时间,只好用两次for+find,肯定很慢。

cd /d 你的目录
:: 如果要包含子目录,用for /r . %%a in (*)

:: 显示文件修改时间
for %%a in (*) do echo "%%~ta"
:: 中文格式时相当于
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tw "%%a" ^| find /i "%%~nxa"'
) do echo "%%b %%c"

:: 删除某个时间后修改过的文件(这个简单)
for %%a in (*) do if "%%~ta" gtr "2008-04-01" echo del "%%a"

:: 这个才是显示文件创建时间
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"'
) do echo "%%b %%c"

:: 删除某个时间之后创建的文件,如果要删除某个时间之前创建的,更改两
:: 处gtr为lss。除了日期外,增加判断时间,可以去掉else段。
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"') do (
  if "%%b" gtr "2010-12-15" (
    echo del "%%a"
  ) else (
    if "%%b" equ "2010-12-15" if "%%c" gtr "14:50" echo del "%%a"
  )
)

:: 用批处理计算时间受到系统的日期格式限制,影响到用set取某一字段的值,
:: 批处理计算时间方法过于复杂,要么只用vbs脚本删除文件,要么用批处理
:: 配合vbs脚本删除。

:: 取10天之前的日期,取回放入变量OldDate
echo wscript.echo dateadd("d",-10,date)>GetOldDate.vbs
for /f %%a in ('cscript /nologo GetOldDate.vbs') do set OldDate=%%a
echo %OldDate%
del GetOldDate.vbs

:: VBScript里没有Format函数,Year、Month、Day等函数取数值后也要处理小
:: 于10的数字,只能用下面的方法整理日期格式
echo wscript.echo dateadd("d",-10,date)>GetOldDate.vbs
for /f "tokens=1,2,3* delims=-/. " %%i in ('cscript /nologo GetOldDate.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)
if %m% LSS 10 set m=0%m%
if %d% LSS 10 set d=0%d%
set OldDate=%y%-%m%-%d%
echo %OldDate%
del GetOldDate.vbs

:: 综合上文,最后得到我们想要的结果
:: 删除10天前创建的旧文件(不含子目录)
echo wscript.echo dateadd("d",-10,date)>GetOldDate.vbs
for /f "tokens=1,2,3* delims=-/. " %%i in ('cscript /nologo GetOldDate.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)
if %m% LSS 10 set m=0%m%
if %d% LSS 10 set d=0%d%
set OldDate=%y%-%m%-%d%
del GetOldDate.vbs
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"') do (
  if "%%b" lss "%OldDate%" echo del "%%a"
)

:: 删除10天前修改的旧文件(不含子目录)
echo wscript.echo dateadd("d",-10,date)>GetOldDate.vbs
for /f "tokens=1,2,3* delims=-/. " %%i in ('cscript /nologo GetOldDate.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)
if %m% LSS 10 set m=0%m%
if %d% LSS 10 set d=0%d%
set OldDate=%y%-%m%-%d%
del GetOldDate.vbs
for %%a in (*) do if "%%~ta" lss "%OldDate%" echo del "%%a"

:: 本文全部用echo del代替del,只是显示要删除的文件,并不实际删除。

pause
goto :eof
(0)

相关推荐

  • 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件

    下是备份的批处理,添加到"计划任务"中,设定时间自动运行 复制代码 代码如下: @echo off rem 格式化日期 rem date出来的日期是"2006-02-22 星期三",不能直接拿来使用,所以应该先格式化一下 rem 变成我们想要的.date:~0,4的意思是从0开始截取4个字符 set d=%date:~0,4%%date:~5,2%%date:~8,2% rem 设定压缩程序路径,这里用的是WINRAR的rar.exe进行打包的 set path=C

  • cmd forfiles 从文件夹或树中选择要进行批处理的文件(方便批量删除n天前的文件)

    FORFILES [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -] {yyyy-MM-dd | dd}] 描述: 选择一个文件(或一组文件)并在那个文件上 执行一个命令.这有助于批处理作业. 参数列表: /P pathname 表示开始搜索的路径.默认文件夹是当前工作的 目录 (.). /M searchmask 根据搜索掩码搜索文件.默认搜索掩码是 '*'. /S 指导 forfiles 递归到子目录.像 "DIR /S&q

  • 用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

    核心代码: @echo off :: by oicu#lsxk.org :: 15:17 2011-1-13 :: 如果只是删除指定日期或N天前修改的文件,用forfiles即可 FORFILES /P "C:\测试目录" /S /M *.log /D -3 /C "cmd /c if @isdir==FALSE echo del @file" :: 指定日期(包含)前修改的文件:/D -yyyy/mm/dd :: 以下是流水账 :: 使用限制:控制面板里设定日期格

  • 用PowerShell删除N天前或指定日期(前后)创建(或修改)的文件

    本来想用批处理的,想想算时间太麻烦了-- 立马安装PowerShell看帮助文档,里面有个例子: 以下命令查找 Program Files 文件夹中上次修改日期晚于 2005 年 10 月 1 日并且既不 小于 1 MB 也不大于 10 MB 的所有可执行文件(测试发现没法运行-_-!): Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object ` -FilterScript {($_.LastWr

  • 易语言显示指定日期时间的方法

    指定时间命令 英文命令:GetSpecTime 操作系统支持:Windows.Linux  所属类别:时间操作 返回包含指定年.月.日.小时.分.秒的时间.如果指定了无效时间,将自动使用最相近的有效时间代替. 语法:  日期时间型  指定时间 (年,[月],[日],[小时],[分钟],[秒]) 例程 说明 点击不同的按钮指定不同的时间,"指定错误时间"按钮将指定一个无效的时间,所以"指定时间"命令会自动使用最相近的有效时间代替,标签会显示2004年2月29日12时2

  • linux每天定时备份数据库并删除十天前数据详细步骤

    每天定时备份数据库需要用到Linux的定时任务,利用Linux的crondtab 命令.下面我们来看详细步骤: 一.写好shell脚本 mysqlbak.sh #!/bin/sh mysqldump -uroot -pmysqlroot xhblt | gzip > /mysqlbak/`date '+%Y-%m-%d_%H:%M:%S'`.sql.gz find /mysqlbak/ -mtime +10 -name "*.sql.gz" -exec rm -rf {} \;

  • 使用forfiles命令批量删除N天前文件

    在整理手上几台SQL SERVER 2000的数据库备份时,一方面为了方便快速还原数据库,另外一方面为了备份冗余.备份方式统一(先备份到本地,然后收上磁带),将以前通过Symantec Backup Exec直接备份上带的作业改成了如下方式:     Step 1: 通过数据库维护计划将备份生成在本地磁盘M,完整备份保留2天,事务日志备份保留3天 M:\DB_BACKUP\FULL_BACKUP             M:\DB_BACKUP\LOG_BACKUP Step 2:  备份完成后

  • linux的一个find命令配合rm删除某天前的文件方法

    语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前带"."的文件删除 find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \; find:linux的查找命令,用户查找指定条件的文件 /usr/local/backups:想要进行清理的任意目录 -

  • Windows和Linux下定时删除某天前的文件的脚本

    以前做到最多的定时我们就是定时备份功能了,我们常用利用定时功能来备份网站数据或备份数据库了,下面我来给(www.jb51.net)大家介绍几个Linux与Windows中定时删除某天前的文件方法,这个与备份有点区别,但大同小义了. Windows下bat文件内容如下: 复制代码 代码如下: @echo off forfiles -p "D:\servers\apache2.2\logs" -s -m *.log -d -15 -c "cmd /c del @path"

  • Linux自动删除n天前日志及实例命令

    1.删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \; 说明: 将/opt/soft/log/目录下所有30天前带".log"的文件删除.具体参数说明如下: find:linux的查找命令,用户查找指定条件的文件: /opt/soft/log

随机推荐