当文件名冲突时,如何重命名旧文件或将其备份到文件夹中?

当文件名冲突时,如何重命名旧文件或将其备份到文件夹中?

如您所知,如果您选择“保留两个文件”,则默认的 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\

相关内容