WTBD
WTBD
Published on 2024-09-29 / 68 Visits
2

资料备份复制命令「日志记录」 | 文件夹对比「大小对比」

「重要」资料备份复制命令 - 「日志记录」 .bat

@echo off
setlocal

REM 设置1号和2号地址路径
set "source=C:\Users\17777\Desktop\服务器"
set "destination=C:\Users\17777\Desktop\移动硬盘"

REM 设置日志保存路径
set "log_folder=C:\Users\17777\Desktop"
set "log_file=%log_folder%\robocopy_log_%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%.txt"

REM 创建日志保存文件夹
mkdir "%log_folder%" 2>nul

REM 提示用户可以按Ctrl+C中断操作
echo 开始文件复制操作... 按 Ctrl+C 终止.

REM 使用Robocopy进行增量备份并显示进度,将输出重定向到临时文件
REM /E 复制所有子目录,包括空目录
REM /XO 排除较新的文件(如果目标文件较新则跳过复制)
REM /XX 排除额外文件和目录(目标中有但源中没有的文件和目录将被跳过)
REM /R:3 复制失败时重试3次
REM /W:5 每次重试前等待5秒
REM /V 生成详细输出,显示正在复制的文件
REM /ETA 显示每个文件的预估完成时间
robocopy "%source%" "%destination%" /E /XO /XX /R:3 /W:5 /V /ETA > "%log_file%.tmp"

REM 输出复制完成的消息
echo 文件复制完成!

REM 延迟输出临时文件的内容到命令行界面和最终日志文件
type "%log_file%.tmp"
type "%log_file%.tmp" >> "%log_file%"

REM 删除临时文件
del "%log_file%.tmp"

pause

endlocal

文件夹对比.bat

@echo off
setlocal

REM 获取当前日期和时间的年、月、日、时、分
for /f "tokens=2 delims==" %%I in ('wmic os get LocalDateTime /value') do set "datetime=%%I"
set "YY=%datetime:~0,4%"
set "MM=%datetime:~4,2%"
set "DD=%datetime:~6,2%"
set "HH=%datetime:~8,2%"
set "MIN=%datetime:~10,2%"

REM 设置1号和2号地址路径
set "source=C:\Users\17777\Desktop\服务器"
set "destination=C:\Users\17777\Desktop\移动硬盘"

REM 设置日志文件路径,包含当前日期和时间
set "log_folder=C:\Users\17777\Desktop"
set "log_file=%log_folder%\folder_comparison_log_%YY%-%MM%-%DD%_%HH%-%MIN%.txt"

REM 使用 PowerShell 计算源文件夹的总大小(包括子文件夹和文件)
for /f %%A in ('powershell "(Get-ChildItem '%source%' -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB"') do (
    set "source_size=%%A GB"
)

REM 使用 PowerShell 计算目标文件夹的总大小(包括子文件夹和文件)
for /f %%B in ('powershell "(Get-ChildItem '%destination%' -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB"') do (
    set "destination_size=%%B GB"
)

REM 输出比较结果到控制台和日志文件
(
    echo 两个文件夹占用空间比较:
    echo.
    echo %source% 大小: %source_size%
    echo %destination% 大小: %destination_size%
    echo.
    if "%source_size%" equ "%destination_size%" (
        echo 两个文件夹的大小相同
    ) else (
        echo 两个文件夹的大小不同
    )
) > "%log_file%"

REM 显示日志文件路径
echo 日志已保存到: %log_file%

pause
endlocal