2012-12-01 22 views
0

我想從PC特定的文件複製到USB複製文件作爲另一名如果文件存在

我的代碼:

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

我想要做如下: 如果G:\備份\ image1的。 JPEG存在,複製image.jpeg爲image2.jpeg(或其他名稱),

如果image2.jpeg存在,複製爲image3.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 
相關問題