Delete all *.Zip files older than today using Windows batch file - batch-file

Assuming you must use a Windows batch file, (not powershell), and one wants to delete all files ending in .zip that are in the current active directory. How to do this?
All attempts so far are failing:
forfiles -p "C:\temp\test" -s -m *.zip -d 1 -c "cmd /c del *.zip"
For this it says
ERROR: No files found with the specified search criteria.

As suggested in my comment, your problem could easily be solved by reading the usage information for your command, (available when entering FORFILES /? at the Command Prompt).
Based on your questions criteria, "delete all files ending in .zip that are in the current active directory":
You don't need to use the /P option because as stated in the usage information, "The default folder is the current working directory (.)".
There is nothing in your question regarding recursing subdirectories of the current directory, so the /S option which "Instructs forfiles to recurse into subdirectories" is not required.
For the /D option you are looking for files with a last modified date less than yesterday, i.e. "the current date minus "dd" days", /D -1.
Because you're wanting to delete files in the current directory, there's no need to use the "Full path of the file", #path, so what you need is the "The name of the file", #file.
FORFILES /M *.zip /D -1 /C "CMD /C DEL #file"

You did not mention anything about subdirectories or windows version so I'm assuming somewhat. You have an old version syntax. In Windows 7 and further the syntax changed a little bit.
For windows 7:
forfiles /P "C:\temp\test" /S /M *.zip /D -1 /C "cmd /c del #path"

Related

Batch script command

I am a rookie at programming.
I have created a batch script to move files from one location to other based on date.
I want to move all files expect the files having modification date 3 days lesser than the current date.Also I want to log the files which has been moved in a new text document.
I am able to move the files but not able to log the moved files.
Command which i used is
forfiles /p C:\Users\Desktop\batchtest\ /s /m . /d -3 /c "cmd /c move #FILE \"C:\Users\Desktop\nov""
What i need is to create a textfile which shows the files moved by the above command.Could someone help me on this?
This is not same to Just deleting the file based on the date I suppose.
You could redirect all command output in to a file, like so:
forfiles /p C:\Users\\Desktop\batchtest\ /s /m . /d -3 /c "cmd /c move #FILE \"C:\Users\Desktop\nov"">log.txt
Notice the ">log.txt". That will redirect all non-error output into the provided file. It will create it if it isn't there. If you want to redirect errors, too, put a 2>log.txt >log.txt at the end instead. Source

Batch file to start all documents 3 days old or newer in a folder

I am trying to create a batch file that will:
Start in a minimized state, all documents 3 days old or newer, in a folder.
It appears this must be a combination of the for, forfiles and start /min commands.
I have tried:
This script properly opens in my date range, the first document in the directory but will not open any more documents until I close the first document. It will not start them minimized:
forfiles /p "C:\Users\user\Documents\test" /s /d -3 /c "cmd /c #path"
This opens all documents at once, each in its own command prompt window but does not show the document in its appropriate default program, i.e. Microsoft Word for .doc files. It also does not open them minimized:
forfiles /p "C:\Users\user\Documents\test" /s /m *.* /c "cmd /c Start #path" /d -3
This opens all docs but not minimized or in my date range:
for %i in (c:\Users\user\Documents\test\*) do %i
I do not have a script that will open a documents in a minimized state.
Please help!
Many thanks!

Delete file if older than 5 days using FORFILES

I cant get FORFILES to work for me. I run a .bat that backs up a few databases I have each day using this one example below.
COPY "X:\W Attendenance\C Crew Attendance\Attendance Control DB v4.xx.accdb" "X:\Supervisors Log\Backups\Attendance Bak\bak_%currdate%_Attendance Control DB v4.xx.accdb"
Then after running my backups I wanted to delete the old files that were older than five days by using the below example.
FORFILES /p "X:\Supervisors Log\Backups\Attendance Bak\" /d -5 /c "cmd /c del #path "
But what happens is it creates the backups but never deletes the old ones. What am I doing wrong?
Ken it still seems to not work. I changed the #file to #path and ran and I still have my backups. I also had another question, can I limit the delete to just files starting in bak_ ? and can I delete the file by its name because every backup starts with bak_ then the date mm-dd-yyyy_ then name of the file...
This fixed it... Thanks for your help and links!
forfiles -p "X:\Supervisors Log\Backups\Attendance Bak" -s -m *.* -d -1 -c "cmd /c del #path"
On a side note that only is able to delete the File but Sometimes I needed to delete a folder and everything in it so I use:
FORFILES /P "H:\BACKUPS\bk_Operator_Rate_Program" /d -10 /c "cmd /c IF #isdir == TRUE rd /S /Q #path"

forfiles with compact

I wanted to compress all the files under a directory which are older than today.
The command i am using is
forfiles /p E:\testbeg /s /d -1 /c "CMD /c Compact "
In the E:\Testbeg there are folders and files which are created today and some of them are older one.
I want to compress all the files which are older than today and keep today files as it is.
The following will compact files that have not been modified within the last day, but apparently it is not what you are looking for.
forfiles /p E:\testbeg /s /d -1 /c "CMD /c if #isdir==FALSE Compact /c #path"
Based on your comment, you want to compact all files that exist within folders that were created more than 1 day ago. I presume you also want to compact the folder itself so that new files that are added to it will automatically be compacted.
I don't think FORFILES will help, because it uses the "last modified date", not the "creation date". If you add or modify a file within a folder, then the folder's last modified date is updated.

How to copy all files created between two dates using Command prompt?

I have written code in window batch file (eq. getFiles.bat ) that get all files within select date range.
eq.
xcopy /S /D:01-10-2011 *.* C:\todaysFiles
But I want get all files in between two dates including From date and To date.
file extension is .cmd or .bat
If you're on Vista/Win7/WinServer2008 you can use robocopy like so:
robocopy c:\source c:\destination *.* /MAXAGE:20101231 /MINAGE:20111001
On XP, I'm not sure if there are built-in solutions short of using Powershell and the like.
The title of this question is slightly misleading. Based on the questioner's xcopy example, I believe the questioner wants to know "How to copy all files created...", not how to get all files (which I equate with list).
The questioner also states "file extension is .cmd or .bat". This could mean that the questioner wants to copy only files with these extensions but I think it means the questioner would like a batch script solution.
To use the following solution, open a command prompt and chdir to the folder where the files to be copied are located. Then enter the commands listed below, changing the SET values as appropriate.
SET DESTINATION=C:\destination
SET DATE_FROM=01/01/2005
SET DATE_TO=01/01/2007
> nul forfiles /S /D +%DATE_FROM% /C "cmd /C if #isdir==FALSE 2> nul forfiles /M #file /D -%DATE_TO% && > con ( echo #path && copy /V #path %DESTINATION% )"
Note: this will copy files in subfolders as well as files in the top-level folder.
The SET values could be hard-coded directly into the > nul forfiles... line, meaning only one line is required, but for clarity I've used variable substitution.
A caveat is that it is based on date modified (original question asked for date created)
Credit to aschipfl (https://stackoverflow.com/a/36585535/1754517) for providing the inspiration for my answer.
You can also use the forfiles command. It can search recursively in all subfolders /s for files created in the selected root folder /p <Path>, execute commands on the selected files /c "<Command>", apply masks to search /m <SearchMask>, between a date range /d [{+|-}][{<Date>|<Days>}]
more info here, and here
Here's a batch for viewing files by creation date by year. Easily changed to cmd prompt by removing the extra percentage symbols.
for %%a in (2011 2012 2013 2014 2015 2016 2017) do (
for /f %%i in ('xxcopy i:\podcasts\*.* /LL /ZS /Q /FC /DA:%%a-01-01 /DB:%%a-12-31 ^| find /c /v ""') do echo %%a: %%i
)

Resources