自动复制文件而不覆盖,而是创建编号的文件

时间:2012-09-21 09:11:37

标签: batch-file vbscript xcopy robocopy

我需要定期复制文件,例如每小时一次,所以我尝试设置一个xcopy批处理,说它应该复制需要复制到另一个文件夹的文件。现在当它复制时,它会覆盖那些不应该做的文件。

当复制文件时,它应该创建一个新文件,名称类似于File.txt,File-COPY1.txt,File-COPY2.txt或类似的东西。

有什么办法吗?

提前致谢。

4 个答案:

答案 0 :(得分:2)

只需在文件名中添加时间戳,即可为每次运行创建单个文件。像这样:

XCOPY "File.txt" "[TargetDir]\File1_%time:~0,2%_%time:~3,2%_%time:~6,2%.txt"

如果复制操作发生在11:30:05,则解析为文件名,读作File1_11_30_05.txt%time:~0,2%部分从存储在变量%time%中的时间字符串中提取2位数。

此外,您还可以以相同的方式添加日期。您可以将变量%date%用于此目的。

如果您确实需要File-COPY1.txtFile-COPY2.txt等模式,则需要更多工作。告诉我们时间戳方法是否不充分。

答案 1 :(得分:1)

此批处理采用相对或显式两个目录的名称,并将第一个目录中的所有文件复制到第二个目录,但在文件名和扩展名之间添加 - #(其中#是副本的数量)第二个目录中的文件)。因此,如果只有一个文件(MISC.txt)从dir1复制到dir2,但它被复制了4次,则dir2将包含4个文件:(MISC-1.txt MISC-2.txt MISC-3.txtMISC-4.txt

要使用zcopy.bat,请将其称为zcopy fromDir toDir

zcopy.bat

@echo off
if "%1"=="" goto :eof
if "%1"=="/?" type %~dpnx0 & goto :eof
if "%2"=="" goto :eof
if not exist %2 md %2
setlocal enableDelayedExpansion
for %%x in (%1\*.*) do (
  set this=
  set count=1
  if "%%~xx"=="" (
    set backstop=.
  ) else (
    set backstop=
  )
  for /f %%y in ('dir /b /a:-d /o:n "%2\%%~nx-*%%~xx!backstop!" 2^>nul') do ( 
    set this=%%~nxy
  )
  if not "!this!"=="" (
    set count=!this:%%~nx-=!
    if "%%~xx"=="" (
      set /a count=!count!+1
    ) else (
      set /a count=!count:%%~xx=! + 1
    )
  )
  set target=%%~nx-!count!%%~xx
  echo copy "%%x" "%2\!target!"
  copy "%%x" "%2\!target!" > nul 2>&1
)

如果目录%2不存在,则上面的代码将创建它。

答案 2 :(得分:1)

我用它来每天备份文件。

    set aa=%date:~4,2%%date:~7,2%%date:~12,2%
    copy filename.txt c:\backupfolder\filename%aa%.txt

希望有所帮助。 斯科特....

答案 3 :(得分:0)

迭代文件名,即每次给出一些新名称。你可以简单地附加数字。
使用一个计数器,每次增加它&递增计数器与fileName连接