3

I am having issues making this syntax work correctly. What I would like to do is remove all tmp and bak files from the specified directory and all subdirectories if the modified date is older than 7 days.

for %G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%G -d -7 -c "cmd /c del @path"

My syntax was gathered from this StackOverflow question.

If I change my search mask to only include one desired extension then I get correct results.

forfiles -p "c:\test\cad projects" -s -m *.bak -d -7 -c "cmd /c del @path"

I don't do much with batch files so I was hoping someone could assist. Thanks for reading.

5

If you're running this from the console, it should work. If you're saving this to a .bat file, then the format for variables is a little different. You have to use two percentage signs to signify a variable. So, your command would then become...

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%%G -d -7 -c "cmd /c del @path"

Microsoft's KB75634 article explains why this is.

If there are no characters between the two percent signs, one percent sign is stripped off and the other will remain. This is why a FOR command that echos the name of each file with a .COM extension would be

FOR %V IN (*.COM) DO ECHO %V

but if the same command is placed in a batch file, the following is required:

FOR %%V IN (*.COM) DO ECHO %%V
1
  • @TWood, I added a snippet from Microsoft.com on why you have to do that. Sep 26 '13 at 19:49
0

Well I didn't read carefully enough on the FOR /R syntax. I was missing a %. My code above would have worked at the command line. From a batch though, it failed because of the missing %.

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m
*%%G -d -7 -c "cmd /c del @path"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.