Se você estiver executando isso no console, isso deve funcionar. Se você estiver salvando isso em um arquivo .bat , o formato das variáveis será um pouco diferente. Você tem que usar dois sinais de porcentagem para indicar uma variável. Então, seu comando então se tornaria ...
for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%%G -d -7 -c "cmd /c del @path"
O artigo KB75634 da Microsoft explica por que isso acontece.
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