我想将特定文件从pc复制到usb
我的代码:
xcopy /H /Y /C /R "C:\image1.jpeg" "G:\backup\image.jpeg"
我想做以下事情: 如果G:\ backup \ image1.jpeg存在,请将image.jpeg复制为image2.jpeg(或另一个名称),
如果存在image2.jpeg,请复制为image3.jpeg和ect ..
是否可以这样做?
答案 0 :(得分: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