2012-12-01 2 views
0

존재한다면 나는 USB파일 복사 파일

PC에서 특정 파일을 복사 할

내 코드 :

xcopy /H /Y /C /R "C:\image1.jpeg" "G:\backup\image.jpeg" 

내가 다음을 수행 할 : 경우 G : \ 백업 \의 image1에. JPEG는

는이 작업을 수행 할 수 있나요 .. image2.jpeg이 존재하는 경우

이 요법 image3.jpeg과 같이 복사, 존재 image2.jpeg (또는 다른 이름)로 image.jpeg 복사?

+0

실제로 'xcopy/H/Y/C/R "C : \ image.jpeg" "G : \ backup \ image1.jpeg"'를 사용하셨습니까? 귀하의 질문은 그것이 쓰여지는 방식으로 이해가되지 않습니다. – dbenham

답변

2

원본 이름이 "image.jpeg"이고 목적지에 추가 된 접미사가 있다고 가정합니다.

첨부 된 접미사 앞에 점을 넣어 원래 이름이 끝나고 접미사가 시작되는 위치를 분명히하는 것이 좋습니다. 원래 이름에는 이미 끝에 숫자가있을 수 있습니다.

최대 100 부까지 지원하는 아주 근사하지만 매우 효과적인 무차별 방식입니다. 분명히 상한선을 쉽게 늘릴 수 있습니다.

call :backup "c:\image.jpeg" 
exit /b 

:backup 
for /l %%N in (1 1 100) do (
    if not exist "G:\backup\%~n1.%%N.%~x1" (
    echo F|xcopy %1 "G:\backup\%~n1.%%N.%~x1" >nul 
) 
    exit /b 
) 

그러나 잠재적 인 문제가 있습니다. image.1.txt 및 image.2.txt가 이미 있다고 가정하지만 image.1.txt는 삭제됩니다. 다음 번에 백업하면 image.1.txt가 다시 만들어지고 image.2.txt가 가장 최근의 백업이라고 생각할 수 있습니다.

다음은 가장 큰 기존 접미어보다 큰 숫자 접미어 1을 사용하여 새 백업을 만들 때 사용할 수 있습니다 (숫자에 전체가 있더라도).

@echo off 
call :backup "c:\image.jpeg" 
exit /b 

:backup 
setlocal disableDelayedExpansion 
set /a n=0 
for /f "eol=: delims=" %%A in (
    'dir /b "g:\backup\%~n1.*%~x1"^|findstr /rec:"\.[0-9][0-9]*\%~x1"' 
) do for %%B in ("%%~nA") do (
    setlocal enableDelayedExpansion 
    set "n2=%%~xB" 
    set "n2=!n2:~1!" 
    if !n2! gtr !n! (
    for %%N in (!n2!) do (
     endlocal 
     set "n=%%N" 
    ) 
) else endlocal 
) 
set /a n+=1 
echo F|xcopy %1 "g:\backup\%~n1.%n%%~x1" >nul