Как только вы записываете новую версию файла в ту же папку, что и оригинал (с тем же именем), уже слишком поздно переименовывать оригинал - он больше не существует. Вам нужны две папки: одна, которая получает новые версии (new
), и другая, в которой вы храните переименованные файлы, а также новые (old
)
@ECHO OFF
setlocal
set "source=C:\Users\test\new"
set "destin=C:\Users\test\old"
set "files=*.txt"
REM for every matching file in the source folder:
for %%A in ("%source%\%files%") do (
REM if there is such a file in the destination folder, rename it:
if exist "%destin%\%%~nxA" ren "%destin%\%%~nxA" "%%~nA-%date%%%~xA"
REM only then copy the file:
copy "%%~fA" "%destin%\"
)
Это не удастся, если вы запускаете его более одного раза в день. (Для этого нужно больше кода; например, добавление time
тоже)
Также произойдет сбой, если ваш %date%
содержит символы, которые не допускаются в именах файлов (мой %date%
выглядит как 29.01.2019
). (Для этого нужно больше кода; например %date:/=-%
)