I want to copy specific file from pc to usb
my code :
xcopy /H /Y /C /R "C:\image1.jpeg" "G:\backup\image.jpeg"
i want to do following : if G:\backup\image1.jpeg exist, copy image.jpeg as image2.jpeg (or as another name),
if image2.jpeg exist, copy as image3.jpeg and ect..
Is it possible to do this?
I'm going to assume your source name is "image.jpeg" and your destination has the appended suffix.
I recommend putting a dot before the appended suffix to make it clear where the original name ends and the suffix begins. Your original name could already have a number at the end.
Here is a crude but very effective brute force method that supports up to 100 copies. Obviously the upper limit can easily be increased.
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
)
But there is a potential problem. Suppose image.1.txt and image.2.txt already exist, but then you delete image.1.txt. The next time you backup it will re-create image.1.txt and then you might think that image.2.txt is the most recent backup.
The following can be used to always create a new backup with the number suffix 1 greater than the largest existing suffix, even if there are wholes in the numbers.
@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