windows下定期清理超过一定时间的文件

windows下定期清理超过一定时间的文件

背景

linux下当我们想定期清理超过7天无修改的日志或备份文件,可以通过以下命令来完成:

find $path -type f  -mtime|-ctime +7 -exec rm -f {} \;

windows下的find命令,看起来远没有linux下这个强大:

C:\Documents and Settings\qunyingliu>find /?
Searches for a text string in a file or files.

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         Displays all lines NOT containing the specified string.
  /C         Displays only the count of lines containing the string.
  /N         Displays line numbers with the displayed lines.
  /I         Ignores the case of characters when searching for the string.
  /OFF[LINE] Do not skip files with offline attribute set.  "string"   Specifies the text string to find.
  [drive:][path]filename
             Specifies a file or files to search.

If a path is not specified, FIND searches the text typed at the prompt
or piped from another command.

那要怎么才能完成定时清理超过一定时间的文件,莫非真的要等磁盘告警后人工去处理吗?

找外援,找内助

俗话说,开发靠 Google,运维靠 Baidu,让我们也google一次,发现了一个很有用的windows 命令行,FORFILES。

FORFILES命令的帮助信息:
FORFILES [/P pathname] [/M searchmask] [/S]
        [/C command] [/D [+ | -] {yyyy/MM/dd | dd}]

描述:
选择一个文件(或一组文件)并在那个文件上执行一个命令。

参数列表:

    /P    pathname      表示开始搜索的路径。默认文件夹是当前工作的
                        目录 (.)。
    /M    searchmask    根据搜索掩码搜索文件。默认搜索掩码是 ‘*‘。
    /S                  指导 forfiles 递归到子目录。像 "DIR /S"。
    /C    command       表示为每个文件执行的命令。命令字符串应该
                        用双引号括起来。
                        默认命令是 "cmd /c echo @file"。下列变量
                        可以用在命令字符串中:                        @file    - 返回文件名。                        @fname   - 返回不带扩展名的文件名。                        @ext     - 只返回文件的扩展名。                        @path    - 返回文件的完整路径。                        @relpath - 返回文件的相对路径。                        @isdir   - 如果文件类型是目录,返回 "TRUE";
                                   如果是文件,返回 "FALSE"。                        @fsize   - 以字节为单位返回文件大小。                        @fdate   - 返回文件上一次修改的日期。                        @ftime   - 返回文件上一次修改的时间。
                        要在命令行包括特殊字符,字符请以 0xHH
                        形式使用十六进制代码(例如,0x09 为 tab)。
                        内部 CMD.exe 命令前面应以 "cmd /c" 开始。
    /D    date          选择文件,其上一次修改日期大于或等于 (+),
                        或者小于或等于 (-) 用 "yyyy/MM/dd" 格式指定的日期;
                        或选择文件,其上一次修改日期大于或等于 (+)
                        当前日期加 "dd" 天,或者小于或等于 (-) 当前
                        日期减 "dd" 天。有效的 "dd" 天数可以是                        0 - 32768 范围内的任何数字。如果没有指定,                        "+" 被当作默认符号。
    /?                  显示此帮助消息。

问题解决

根据forfiles文件的说明,我们需要删除x:\xxxx目录下超过7天的所有文件,那么命令如下:

forfiles /P x:\xxxx  /S /C "cmd /c del @path" /D -7

当然由于我要删除的x:\xxxx没有子目录,也不需要保留,所以找到7天前的文件都可以删除,如果是需要保留子目录那就要指定/M后面的参数,比如 /M "*.sql" 删除所有找到的超过七天的.sql结尾的文件。

51cto博客一般只会记录一些运维的事情,编辑器不支持markdown。

欢迎来简书来听我吹牛聊马拉松聊生活,http://www.jianshu.com/users/0158c185ef40。

时间: 2024-10-25 07:01:11

windows下定期清理超过一定时间的文件的相关文章

在windows下,新建点开头的文件

教大家如何在windows下建立一个以"."开头的文件. 新建一个“..txt”不就行了?(这是我朋友想到的) 对吧,建好了. 大家会说,还是不能新建".hatccess"这样的文件. 我来演示. 1.按windows徽标键+R键.2.输入“cmd”,回车.3.文件新建在桌面上,输入“cd Desktop”4.在桌面上先新建一个123.txt.5.输入“copy 123.txt 你要新建的文件名”.6.删除“123.txt”,可以看到已经有了一个“.txt”(就是你

windows下Python打开包含中文路径名文件

windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存.打开文件的函数中使用诸如open(filename.encode('gbk'))可以很好的解决. #coding:utf8 if __name__ == '__main__': srcfile = r"D:/测试路径/测试文件.txt" f = open(srcfile.decode('utf8').encode('gbk')) for text in f.readlines

Windows下Git Bash中VIM打开文件中文乱码

Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 [email protected] MINGW64 /d/项目GGE/Hard_for_GGE (master)$ cd /etc/ [email protected] MINGW64 /etc$ vi vimrc 步骤二 在打开的vimrc文件开头添加以下代码: set nu set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom 保存并退出vimrc编辑文档. 步骤三 1.退出git

windows下安装easy_install, pip 及whl文件安装方法

写在前面的话 最近在看"Computer Vision with Python"需要安装PIL库,平时一直在windows下开发,就去"Python Extensions for Windows"下找找看,结果下下来文件的拓展名是.whl.Google了一番才知道安装这种拓展名的包需要pip.平时习惯用.exe安装包,easy_install.pip都没装.扒拉点资料,整理下easy_install的安装方法.有一键安装脚本! 安装easy_install 下载ez

[转]windows下VS2010中lib与dll文件的生成与使用

原文地址:https://my.oschina.net/SysuHuyh5LoveHqq/blog/644622 近期在windows下开发了某个程序,需要将其生成静态文件(lib)以及动态库文件(dll),其中参考了不少帖子,有的讲得也不是很清楚明白,先将本人实践过的记录一下,供后期自己查询,也供各位大牛点评. 一.lib文件的生成与使用 1.lib的生成 相对来说,静态库文件还是比较容易生成和使用的,在代码上,貌似也不需要更改什么,举例说明: 头文件函数声明形式如下: extern bool

Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录

CSV的坑 在Ubuntu下是简单的写入完事 import csv ... with open(filename, 'w') as output: f = csv.writer(output) f.writerow(results[0].keys()) .在win7下, 用msys2环境执行同一个python脚本, 发现生成的csv有两个问题: 1)有空行, 2)编码变成了GB2312 关于空行的问题, 百度的结果都是open(filename, 'wb')来解决, 但是在python3下会报

在windows下计算两个时间的时间差(精确到毫秒)

首先,认识一下clock()和GetTickCount(): 一.clock() clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简单而言,就是该程序从启动到函数调用占用CPU的时间.这个函数返回从"开启这个程序进程"到"程序中调用clock()函数"时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-cloc

Windows下基于TCP协议的大文件传输(流形式)

简单实现TCP下的大文件高效传输 在TCP下进行大文件传输,不像小文件那样直接打包个BUFFER发送出去,因为文件比较大可能是1G,2G或更大,第一效率问题,第二TCP粘包问题.针对服务端的设计来说就更需要严紧些.下面介绍简单地实现大文件在TCP的传输应用. 粘包出现原因:在流传输中出现,UDP不会出现粘包,因为它有消息边界(参考Windows 网络编程) 1 发送端需要等缓冲区满才发送出去,造成粘包 2 接收方不及时接收缓冲区的包,造成多个包接收 解决办法: 为了避免粘包现象,可采取以下几种措

Windows下如何建立以"."开头的文件夹

Windows资源管理器不允许创建点开头的文件或文件夹,但在cmd命令提示符下是可以的: 创建命令: md d:\.myfolder .myfolder就是以点开头的文件夹的名称