我想将特定文件从电脑复制到 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)