我可以使用 XCOPY 只复制大小改变的文件吗?
Can i use XCOPY to copy only files that have changed size?
我正在尝试使用 XCOPY 从 Outlook 备份 .PST 文件,并且仅备份自上次使用以来发生更改的文件。
通常情况下,使用 /d 开关仅保存修改日期较新的文件很容易,但 Outlook 会在打开时更改日期,而不管内容是否已更改。
是否可以使用 IF 语句比较文件大小,并且仅在文件大小不同(不一定更大或更小)时才进行备份?
目前正在使用:
XCOPY /m /f /i /y c:\*.pst \NetworkLocation\%USERNAME%\BACKUP
谢谢
一个复制工具不能"update"一个目标文件,这真是令人难以置信。至少 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。
我正在尝试使用 XCOPY 从 Outlook 备份 .PST 文件,并且仅备份自上次使用以来发生更改的文件。
通常情况下,使用 /d 开关仅保存修改日期较新的文件很容易,但 Outlook 会在打开时更改日期,而不管内容是否已更改。
是否可以使用 IF 语句比较文件大小,并且仅在文件大小不同(不一定更大或更小)时才进行备份?
目前正在使用:
XCOPY /m /f /i /y c:\*.pst \NetworkLocation\%USERNAME%\BACKUP
谢谢
一个复制工具不能"update"一个目标文件,这真是令人难以置信。至少 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。