The Forfiles command on Windows selects and executes a command on a file or set of files. Forfiles is ideal for batch processing through scripts. For instance on Windows Server systems. 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 drive C, with the file name “Myinput.txt” as the first argument.

The Forfiles command syntax is:

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

Forfiles on Windows works by implementing the recurse subdirectories flag on tools that are designed to process only a single file. Lets take an example I use a lot as a scheduled task, and break it down:

Forfiles batch process and delete files older than ‘n’ days

Delete files older than 7 days on Windows

A Forfiles command example to batch delete all files older than one day in C:\Windows\Temp:

ForFiles /S /P C:\Windows\Temp /D -1
   /C "cmd /c if @isdir==FALSE del /F /Q @file"
  • /S : Instructs forfiles to recurse into subdirectories. Like “DIR /S”
  • /P [pathname] : Indicates the path to start searching. The default folder is the current working directory (.).
  • /D [date] : Selects files with a last modified date greater than or equal to (+), or less than or equal to (-), the specified date using the “MM/dd/yyyy” format; or selects files with a last modified date greater than or equal to (+) the current date plus “dd” days, or less than or equal to (-) the current date minus “dd” days. A valid “dd” number of days can be any number in the range of 0 – 32768.
    “+” is taken as default sign if not specified.
  • /C [command] : Indicates the command to execute for each file.
    Command strings should be wrapped in double quotes. The default command is “cmd /c echo @file”. The following variables can be used in the command string:
    @file – returns the name of the file.
    @fname – returns the file name without extension.
    @ext – returns only the extension of the file.
    @path – returns the full path of the file.
    @relpath – returns the relative path of the file.
    @isdir – returns “TRUE” if a file type is a directory, and “FALSE” for files.
    @fsize – returns the size of the file in bytes.
    @fdate – returns the last modified date of the file.
    @ftime – returns the last modified time of the file.
This may interest you:   How to unzip a file in PowerShell

So what this example does, is delete all files older than one (1) day, in C:\Windows\Temp using Forfiles on Windows. This Forfiles command is ideal for batch processing, to delete files older than ‘n’ days using a .bat file.


Did this post help you solve a problem? Want to say thanks?

Did you find this post interesting? Did it help you solve a problem? If I’ve helped you out and you want to thank me, then why not buy me a coffee?

A small donation of only $5 helps out a lot in the development, research and hosting of this blog.

If I’ve helped you out and you want to thank me, why not buy me a coffee?

Thank you for your support.