Wednesday, May 22, 2013

FORFILES



Forfiles is a powerful Windows command utility that a Windows system Administrator need to know for his daily Administration works. The command is available at C:\Windows\System32 path for the latest versions of Windows operating systems (Windows 7, 2003, 2008 etc). It selects and executes a command on a file or set of files. This command is useful for batch processing.

SYNTAX:

forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]
Parameter List:
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.
  • 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).
  • Forfiles works by implementing the recurse subdirectories flag on tools that are designed to process only a single file.

>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"
>Delete all files in the standard TEMP folders and all their subfolders after 9 days:
forfiles -p"%SYSTEMROOT%\TEMP" -s -c"cmd /c echo del \"@FILE\" & sleep 8 & del \"@FILE\"" -d-9
forfiles -p"%TEMP%" -s -c"cmd /c echo del \"@FILE\" & sleep 8 & del \"@FILE\"" -d-9

>Delete all *.TMP files in the system root (like C:\WINDOWS) that are older than 9 days:
 forfiles -p"%SYSTEMROOT%" -m*.TMP -c"cmd /c echo del \"@FILE\" & sleep 8 & del \"@FILE\"" -d-9

>Delete old IIS log files:

forfiles -p"%SYSTEMROOT%\system32\Logfiles\HttpErr" -c"cmd /c echo del \"@FILE\" & sleep 8 & del \"@FILE\"" -d-99
forfiles -p"%SYSTEMROOT%\system32\Logfiles\W3Svc1" -c"cmd /c echo del \"@FILE\" & sleep 8 & del \"@FILE\"" -d-99
forfiles -p"%SYSTEMROOT%\system32\Logfiles\SmtpSvc1" -c"cmd /c echo del \"@FILE\" & sleep 8 & del \"@FILE\"" -d-99