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.
|
/? | 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 @FILE File name. @FNAME File name without extension. @EXT File name extension. @PATH Full path of the file. @RELPATH Relative path of the file. @ISDIR Evaluates to TRUE if a file type is a directory. Otherwise, this variable evaluates to FALSE. @FSIZE File size, in bytes. @FDATE Last modified date stamp on the file. @FTIME Last 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).
- Select files by an absolute date or a relative date by using the /d parameter.
- 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"
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
forfiles /s /m *.* /d -365 /c "cmd /c echo @file is at least one year old."
forfiles /s /m *.* /d -01/01/2007 /c "cmd /c echo @file is outdated."
forfiles /s /m *.* /c "cmd /c echo The extension of @file is 0x09@ext"