通过批处理文件比较两个文件夹的内容,而不是两个文件的内容

时间:2019-01-04 12:27:27

标签: batch-file backup

我正在将共享网络文件夹中特定文件夹的备份批处理文件写入我的Windows个人计算机。

我想跟踪此网络文件夹上所做的更改,因此我保留了许多带有日期戳和时间戳名的备份文件夹,例如20181224145231,这是在24上创建的备份文件夹十二月(12),201814 h 52分钟31秒。

我所有的datestamp + timestamp备份文件夹都位于单独的文件夹中。

为此,我想出了一个脚本,该脚本从系统获取日期和时间,并使用fc和{检查原始文件夹中的特定文件是否不同于最后一个备份文件夹中的文件。 {1}}循环以获取过去创建的最后一个备份文件夹。

事情发展了,我需要比较整个文件夹(带有子文件夹)的内容,而不仅仅是文件。这就是我碰壁的地方。

我研究了forcomp,但似乎找不到办法。 fc同步文件夹,但是我想每次更改都创建一个新文件夹。我正在考虑的一件事是在两个文件夹(例如7-zip文件)中创建一个比较文件,并在两个文件夹上都运行Robocopy,但这似乎很极端。

所以我的问题总结为:

如何通过批处理文件检查最新备份是否具有与不带第三方工具的网络共享文件夹相同的文件?

1 个答案:

答案 0 :(得分:1)

根据您的要求(在注释中指定),您可以尝试:

@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%
)