如您所知,如果您选择“保留两个文件”,则默认的 Windows 复制处理程序会重命名新文件。我可以使用什么程序来重命名旧文件?或者更好的是,将所有旧文件放入同一位置的备份文件夹中,每个文件都有自己的路径结构?
答案1
rsync --backup
会满足您的要求。您可以使用 为旧文件指定后缀--suffix
,或使用 将旧文件移动到其他文件夹--backup-dir
。
答案2
此脚本将 中的所有重复文件放入 的根目录中%DestinationFolder%
名为 的备份目录中,该目录以变量为前缀,默认情况下为。您可以自定义此值。$Backup_%date%_%time%
%DestinationFolder%
%prefix%
$Backup_
@echo off
set Folder=
set DestinationFolder=
set prefix=$Backup_
set suffix=%date%_%time%
set suffix=%suffix:/=-%
set suffix=%suffix::=-%
cd /d "%Folder%"
for /R %%a in (.) do (
set PTH=%%a
call :DUP
)
xcopy /herkvy "%Folder%" "%DestinationFolder%" 1>nul 2>&1
goto :eof
:DUP
set PTH=%PTH:\.=%
call set PTH=%%PTH:%Folder%=%%
type nul>"%tmp%\FileList"
for /f "tokens=4,* delims= " %%b in ('dir /a "%Folder%%PTH%" ^| find "/" ^| find /i /v "<DIR>"') do (
echo %%c>>"%tmp%\FileList"
)
for /f "tokens=4,* delims= " %%d in ('dir /a "%DestinationFolder%%PTH%" ^| find "/" ^| find /i /v "<DIR>"') do (
find /i "%%e" "%tmp%\FileList" 1>nul 2>&1 && (
if not exist "%DestinationFolder%\%prefix%%suffix%%PTH%" md "%DestinationFolder%\%prefix%%suffix%%PTH%"
move "%DestinationFolder%%PTH%\%%e" "%DestinationFolder%\%prefix%%suffix%%PTH%\%%e" 1>nul 2>&1
)
)
exit /b
注意:请设置Folder
为要备份的文件夹的路径,以及DestinationFolder
目标(备份)文件夹的路径最后无需 Baclslash!例子:
正确的:
set Folder=C:\project\files
set DestinationFolder=D:\Data\backup
错误的:
set Folder=C:\project\files\
set DestinationFolder=D:\Data\backup\