I need to delete all files (recursively in all folders and subfolders) based on their last access time.
I was looking at Stack Overflow post Batch file to delete files older than N days that suggested this answer:
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
However, this deletes files based on last modified time, not last access time.
Also, is there a way to save the command in a script file so I can just doubleclick it to run?
Use Get-ChildItem -recurse
to get all the files, you can then pipe them to the where-object
commandlet to filter out the directories and use the LastAccessTime
property to filter based on that attribute. Then you pipe the result to a foreach-object that executes the delete command.
It ends up looking like this. Note the use of Get-Date, to get all files updated since the start of the year, replace with your own date:
get-childitem C:\what\ever -recurse | where-object {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | foreach-object { del $_ }
Or to use some common aliases to shorten everything:
dir C:\what\ever -recurse | ? {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | % { del $_ }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With