Сравните содержимое двух папок вместо содержимого двух файлов через командный файл - PullRequest
0 голосов
/ 04 января 2019

Я записываю резервный пакетный файл для определенной папки, которая находится в общей сетевой папке, на мой персональный компьютер с Windows.

Я хочу отслеживать изменения, внесенные в эту сетевую папку, поэтому я сохраняю множество папок для резервных копий, которые имеют имя даты + метка времени, например 20181224145231, которая является папкой резервных копий, созданной 24 декабря ( 12), 2018 при 14 ч 52 мин 31 с

Все мои резервные папки datetamp + timestamp находятся в отдельной папке.

Для этого я придумал скрипт, который извлекает дату и время из системы и проверяет, отличается ли тот или иной файл в исходной папке от файла, находящегося в последней папке резервных копий, используя fc и for цикл, чтобы получить последнюю резервную папку, созданную в прошлом.

Вещи выросли, и мне нужно сравнить содержимое всей папки (с подпапками), а не только файла. И вот тут я врезался в стену.

Я изучил comp и fc, но, похоже, не могу найти способ. Robocopy синхронизирует папки, но я хочу создавать новую папку каждый раз, когда происходят изменения. Одна вещь, о которой я думаю, - это создать файл сравнения в обеих папках, например, 7-zip-файл, и запустить fc на обеих из них, но это выглядит довольно экстремально.

Итак, подытожив мой вопрос:

Как проверить, есть ли в самой последней резервной копии те же файлы, что и в общей сетевой папке, без сторонних инструментов через пакетный файл?

1 Ответ

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

Согласно вашим требованиям, указанным в комментариях, вы можете попробовать:

@echo off

rem Set variables for size count:
set total_size_backup=0
set total_size_origin=0

rem Find the most recent BACKUP folder:
for /F "delims=" %%A IN ('dir /b /AD /OD') do set "folder_to_search=%%~fA"

rem Find the size of all files inside the backup folder:
for /R "%folder_to_search%" %%B IN (*.*) do (
    set /a "total_size_backup+=%%~zB"
)

rem Find the size of the original folder:
for /R "full_path_to_folder_with_original_files" %%C IN (*.*) do (
    set /a "total_size_origin+=%%~zC"
)

rem Compare the two sizes from these two folders. If they are NOT the same include your code there.
if %total_size_backup% EQU %total_size_origin% (
    echo Well Done! Your newest backup files and your original files are up-to-date!
    pause>nul
    exit /b 0
) else (
    echo Ooops! Your newest backup files and your original files are out-of-date! Never worry! Running backup now, please wait...
    start /min /wait your_backup_file.bat
    echo Updated files successfully!
    exit /b %errorlevel%
)
...