我可以使用XCOPY仅复制更改大小的文件吗?

时间:2015-04-01 14:45:10

标签: batch-file cmd command-prompt

我正在尝试使用XCOPY从Outlook备份.PST文件,并且只备份自上次使用以来已更改的备份文件。

通常情况下,使用/ d开关可以轻松保存只有较新修改日期的文件,但Outlook会在打开时更改日期,无论内容是否已更改。

是否可以使用IF语句来比较文件大小,如果文件大小不同(不一定更大或更小),则只能备份?

目前正在使用:

XCOPY /m /f /i /y c:\*.pst \\NetworkLocation\%USERNAME%\BACKUP

由于

1 个答案:

答案 0 :(得分:0)

这实际上令人难以置信的是,复制工具无法“更新”目标文件。至少XCOPY不能,而且ROBOCOPY AFAIK也不能 这个批处理文件很笨拙,但完成了工作:

@echo off
:: copy files to TARGETDIR if different, modified date or size or name
set TARGETDIR=BACKUP
for %%f in (*.pst) do CALL :COPY_CHANGED %%f %TARGETDIR%
goto :EOF


:COPY_CHANGED
   set saved=(None)
   set live="%~1"
   if not exist "%~2\%~1" goto :DO_COPY
   rem compare file metadata of %1 in current dir and dir %2
   pushd "%~2"
   for /f "tokens=3 usebackq" %%a in (`dir "%~1" ^| findstr /C:"%~1" ^|^|  echo --- `) do set saved=%%a
   popd
   for /f "tokens=3 usebackq" %%a in (`dir "%~1" ^| findstr /C:"%~1"`) do  set live=%%a
   if "%live%".=="%saved%". goto :EOF
:DO_COPY   
   echo original: %live%
   echo backup:   %saved%
   xcopy "%~1" "%~2" /F /Y
   goto :EOF

您需要根据需要调整XCOPY选项。可以删除子例程中的echo行 对于每个文件,批处理文件在源文件夹中收集一次文件大小,然后在目标文件夹中收集文件大小,并使用dir按字面比较它们。如果相同,则跳过文件,否则它是XCOPY'd。