我正在尝试使用XCOPY从Outlook备份.PST文件,并且只备份自上次使用以来已更改的备份文件。
通常情况下,使用/ d开关可以轻松保存只有较新修改日期的文件,但Outlook会在打开时更改日期,无论内容是否已更改。
是否可以使用IF语句来比较文件大小,如果文件大小不同(不一定更大或更小),则只能备份?
目前正在使用:
XCOPY /m /f /i /y c:\*.pst \\NetworkLocation\%USERNAME%\BACKUP
由于
答案 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。