Автоматическая замена файлов - PullRequest
0 голосов
/ 23 января 2019

У меня есть задача переименовать файл и поместить другой файл с тем же именем в ту же папку

Как, например, для папки C:/test У меня есть несколько файлов .txt (предположим, test.txt этонеобходимо переименовать и заменить)
Я хочу переименовать test.txt в test_bkp%date% и поместить туда новый файл.
Нужна помощь для запуска логики.

@ECHO OFF

SET "sourcedir=C:\Users\test\new"
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%C:\Users\Test\new\%filenames%.txt" '
 ) DO (
 SET "filename=%%a"
  ECHO REN "%C:\Users\Test\new\%%a C:\Users\Test\new\%%a_bk_date.*%"
)

GOTO :EOF

Позвольте мне объяснить, что япытаюсь добиться.Я часто получаю файл с обновленными данными.Я не могу просто пойти дальше и заменить старый файл новым.Я должен сделать резервную копию и поместить новый файл в папку.Это моя первая попытка использования пакетного скриптинга

1 Ответ

0 голосов
/ 30 января 2019

Как только вы записываете новую версию файла в ту же папку, что и оригинал (с тем же именем), уже слишком поздно переименовывать оригинал - он больше не существует. Вам нужны две папки: одна, которая получает новые версии (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:/=-%)

...