Batch script to delete file older than N days

There is a requirement to remove log files generated before N days. Initially, I plan to develop it using java program, and create a job to run the java program via 'Task Scheduler'. But, DOS batch script is easier than java program.

The following script is what I did.

@echo off

REM ******************************************************
REM target driver where target folder locates
REM ******************************************************

set td=c:

REM ******************************************************
REM target folder where log files need to be removed
REM ******************************************************

set tf=c:/tmp/test

REM ******************************************************
REM set how many days, -30 means log files generated before 30 days will be removed
REM ******************************************************

set expiryDate=-30

REM ******************************************************
REM execute removal
REM ******************************************************

CD %td%
CD %tf%

echo The following files will be removed.
FORFILES /M oblog.log.* /D %expiryDate% /C "cmd /c echo @path"

FORFILES /M oblog.log.* /D %expiryDate% /C "cmd /c del @path"

@echo on

------------------------------------------

Syntax

forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]

Parameters

 

Parameter Description
/p <Path>
Specifies the path from which to start the search. By default, searching starts in the current working directory.
/m <SearchMask>
Searches files according to the specified search mask. The default search mask is *.* .
/s
Instructs the forfiles command to search into subdirectories recursively.
/c "<Command>"
Runs the specified command on each file. Command strings should be enclosed in quotation marks. The default command is "cmd /c echo @file" .
/d [{+|-}][{<Date>|<Days>}]
Selects files with a last modified date within the specified time frame.
  • Selects files with a last modified date later than or equal to (+ ) or earlier than or equal to (- ) the specified date, where Date is in the format MM/DD/YYYY.
  • Selects files with a last modified date later than or equal to (+ ) the current date plus the number of days specified, or earlier than or equal to (- ) the current date minus the number of days specified.
  • Valid values for Days include any number in the range 0–32,768. If no sign is specified, + is used by default.
/?
Displays help at the command prompt.

Remarks

  • Forfiles is most commonly used in batch files.
  • Forfiles /s is similar to dir /s.
  • You can use the following variables in the command string as specified by the /c command-line option.

     

    Variable Description
    @FILEFile name.
    @FNAMEFile name without extension.
    @EXTFile name extension.
    @PATHFull path of the file.
    @RELPATHRelative path of the file.
    @ISDIREvaluates to TRUE if a file type is a directory. Otherwise, this variable evaluates to FALSE.
    @FSIZEFile size, in bytes.
    @FDATELast modified date stamp on the file.
    @FTIMELast modified time stamp on the file.
  • With forfiles , you can run a command on or pass arguments to multiple files. For example, you could run the type command on all files in a tree with the .txt file name extension. Or you could execute every batch file (*.bat) on drive C, with the file name "Myinput.txt" as the first argument.
  • With forfiles , you can do any of the following:

    • Select files by an absolute date or a relative date by using the /d parameter.
    • Build an archive tree of files by using variables such as @FSIZEand @FDATE.
    • Differentiate files from directories by using the @ISDIRvariable.
    • Include special characters in the command line by using the hexadecimal code for the character, in 0xHH format (for example, 0x09 for a tab).
  • Forfiles works by implementing the recurse subdirectories flag on tools that are designed to process only a single file.

Examples

To list all of the batch files on drive C, type:

forfiles /p c:/ /s /m *.bat /c "cmd /c echo @file is a batch file"
To list all of the directories on drive C, type:
forfiles /p c:/ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
To list all of the files in the current directory that are at least one year old, type:
forfiles /s /m *.* /d -365 /c "cmd /c echo @file is at least one year old."
To display the text " File is outdated" for each of the files in the current directory that are older than January 1, 2007, type:
forfiles /s /m *.* /d -01/01/2007 /c "cmd /c echo @file is outdated." 
To list the file name extensions of all the files in the current directory in column format, and add a tab before the extension, type:
forfiles /s /m *.* /c "cmd /c echo The extension of @file is 0x09@ext" 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值