Wednesday, April 20, 2005

Deleting files that are greater than 30 days old

In looking for a way to delete files that are older than 30 days, I came across ForFiles.exe:


ForFiles is useful for a couple of reasons:
1. It replaces the FOR command in the command shell, which is extremely powerful and useful, but a bit of a pain.
2. It allows you to use relative time (in days) to select the files that you want to act upon

Because links often break, I've included the content here. This is a microsoft TechNet article.


Link to article:

Forfiles

Updated: January 21, 2005
**
**

Forfiles

Selects files in a folder or tree for batch processing.

Syntax

forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]]

Parameters

/p Path

Specifies the Path on which you want to start searching. The default folder is the current working directory, which you specify by typing a period (.).

/m SearchMask

Searches files according to SearchMask. The default SearchMask is *.*.

/s

Instructs forfiles to search in subdirectories.

/c Command

Runs the specified Command on each file. You must wrap command strings with spaces in quotation marks. The default Command is "cmd /c echo @file".

/d[{+ | -}] [{MM/DD/YYYY | DD}]

Selects files with a date greater than or equal to (+) or less than or equal to (-) the specified date, where MM/DD/YYYY is the specified date and DD is the current date minus DD days. If you do not specify + or -, + is used. The valid range for DD is 0 - 32768.

/?

Displays help at the command prompt.

Remarks
•

Forfiles is most commonly used in batch files.

•

Forfiles /s is similar to dir /s.

•

The following table list the variables that you can use in the /cCommand command string.


VariableDescription

@file

File name

@fname

File name without extension

@ext

File 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 it 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 extension. Or, you could execute every batch file (*.bat) on the C:\ drive with the file name "Myinput.txt" as the first argument.

•

With forfiles, you can do any of the following:

•

Select files by an absolute or a relative date using /d.

•

Build an archive tree of files using variables such as @fsize (file size) and @fdate (file date).

•

Differentiate files from directories using the @isdir variable.

•

Format output by including special characters in the command line and surrounding the characters with the hexadecimal code 0xHH.

•

Forfiles works by implementing the recurse subdirectories flag on tools 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 older than 100 days on drive C:, type:

forfiles /p c:\ /s /m*.* /dt-100 /c"cmd /c echo @file : date >= 100 days"

To list all of the files older than January 1, 1993 on drive C:, and then display "file is quite old!" for files with a date older than 01/01/1993, type:

forfiles /p c:\ /s /m*.* /dt-01011993 /c"cmd /c echo @file is quite old!"

To list all of the extensions of all of files on drive C: in column format, type:

forfiles /p c:\ /s /m*.* /c "cmd /c echo extension of @file is 0x09@ext0x09" With:

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 older than 100 days on drive C:, type:

forfiles /p c:\ /s /m *.* /d t-100 /c "cmd /c echo @file : date >= 100 days"

To list all of the files older than January 1, 1993 on drive C:, and then display "file is quite old!" for files with a date older than 01/01/1993, type:

forfiles /p c:\ /s /m *.* /d t-01011993 /c "cmd /c echo @file is quite old!"

To list all of the extensions of all of files on drive C: in column format, type:

forfiles /p c:\ /s /m*.* /c "cmd /c echo extension of @file is 0x09@ext0x09"

Formatting legend


FormatMeaning

Italic

Information that the user must supply

Bold

Elements that the user must type exactly as shown

Ellipsis (...)

Parameter that can be repeated several times in a command line

Between brackets ([])

Optional items

Between braces ({}); choices separated by pipe (|). Example: {even|odd}

Set of choices from which the user must choose only one

Courier font

Code or program output

No comments:

Get Restart log using PowerShell

I'm often curious about a restart on a Windows server system. An easy way to get a list of the restart and what initiated it is to use t...