Проблема в этих двух строках:
for %%F in ("%source%\*") do (
for /f "tokens=1,2,3 delims=/ " %%D in ("%%~tF") do (
Первый FOR использует %% F заменяемый параметр, но второй FOR использует параметры %% D, %% E и %% F (%% D явный, а %% E и %% F неявный, поскольку TOKENS = 1,2,3), поэтому первое значение %% F потеряно. Просто измените один из двух параметров FOR, например:
for %%F in ("%source%\*") do (
for /f "tokens=1,2,3 delims=/ " %%X in ("%%~tF") do (
SET fileDT=%%Z%%X%%Y
РЕДАКТИРОВАТЬ : Ответ на второй вопрос, указанный в комментарии.
В этой строке:
if /I %currdate% GTR %fileDT% (
значение% currdate% равно константа для всех значений в FOR, но% fileDT% меняет с каждым значением в FOR. Чтобы это работало, то есть чтобы получить текущее значение переменной, которая изменилась внутри FOR или IF или скобок, необходимо использовать расширение отложенной переменной, а именно:
if /I %currdate% GTR !fileDT! (
и вы должны включить эту строку в начале программы:
setlocal EnableDelayedExpansion