【问题标题】:Copy file as another name if file exist如果文件存在,则将文件复制为另一个名称
【发布时间】:2012-12-01 12:17:17
【问题描述】:

我想将特定文件从电脑复制到 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 等。

可以这样做吗?

【问题讨论】:

  • 你真的是指xcopy /H /Y /C /R "C:\image.jpeg" "G:\backup\image1.jpeg"吗?你的问题写得不太合理。

标签: batch-file cmd backup xcopy


【解决方案1】:

我将假设您的源名称是“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 2015-05-09
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2017-12-11
    • 2013-08-10
    • 2015-08-31
    相关资源
    最近更新 更多