Batch can be surprisingly powerful but I don't think the kind of date manipulation you want will be practical.
You can use FOR
to split the date into elements and then use SET /A
to do the subtraction, but then you're going to need a huge number of IF
and GOTO
statements to handle cases like subtracting an hour from half past midnight on the 1st of January.
I think you'd be better off investigating VBS or Powershell.
You may want to try this script to delete files from a folder that are older than 1 hour.
# Script Delete1Hour.txt
var str folder, list, file
cd $folder
lf -n "*" $folder ($ftype=="f") AND ( $fmtime < addtime(diff("-10000")) ) > $list
while ($list <> "")
do
lex "1" $list > $file
system del ("\""+$file+"\"")
done
This is biterscripting. The important command is
lf -n "*" $folder ($ftype=="f") AND ( $fmtime < addtime(diff("-10000")) )
Which tells biterscripting - give me all entries in folder $folder with names that match the patten "*" whose file type is "f" (flat file, not directory), and whose file modification time ($fmtime) is earlier than 1 hour. See the documentation for the lf command at http://www.biterscripting.com/helppages/lf.html .
Save the script in file C:/Scripts/Delete1Hour.txt, run it as
script "C:/Scripts/Delete1Hour.txt" folder("C:/testfolder")
It will delete all files from C:/testfolder that are older than 1 hour.