como renomear os arquivos antigos ou salvá-los em uma pasta quando houver colisão de nomes de arquivos?

3

Como você sabe, o manipulador de cópia padrão do Windows renomeia os novos arquivos se você escolher "mantém os dois arquivos". Qual programa posso usar para renomear os arquivos antigos? ou melhor, colocar todos os arquivos antigos em uma pasta de backup no mesmo local, cada um com sua própria estrutura de caminho?

    
por Khanh 23.07.2016 / 15:33

2 respostas

2

rsync --backup faria o que você deseja. Você pode especificar um sufixo para arquivos antigos usando --suffix ou mover arquivos antigos para uma pasta diferente usando --backup-dir .

    
por 23.07.2016 / 20:18
2

Este script coloca todos os arquivos duplicados de %DestinationFolder% em um diretório de backup chamado $Backup_%date%_%time% na raiz de %DestinationFolder% , prefixado por %prefix% variable, que é $Backup_ por padrão. Você pode personalizar esse valor.

@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

Observação: Defina Folder para o caminho da pasta que você deseja fazer o backup e DestinationFolder para o caminho da pasta de destino (Backup) Sem o Baclslash no final! Exemplo :

Correto:

set Folder=C:\project\files
set DestinationFolder=D:\Data\backup

Errado:

set Folder=C:\project\files\
set DestinationFolder=D:\Data\backup\
    
por 23.07.2016 / 19:48

Tags