我想将特定文件从电脑复制到 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 等。
是否有可能做到这一点?
我想将特定文件从电脑复制到 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 等。
是否有可能做到这一点?
我将假设您的源名称是“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