4

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

复制文件时,它应该创建一个新文件,命名为 File.txt、File-COPY1.txt、File-COPY2.txt 或类似名称。

有什么办法吗?

提前致谢。

4

4 回答 4

2

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

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

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

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

如果你真的需要一个模式File-COPY1.txtFile-COPY2.txt等等。这需要更多的工作。告诉我们时间戳方法是否不够。

于 2012-09-21T09:36:59.713 回答
1

此批处理采用两个目录的名称,相对或显式,并将第一个目录中的所有文件复制到第二个目录,但在文件名和扩展名之间添加 -#(其中 # 是文件在第二个目录)。因此,如果只有一个文件 ( )从 dir1 复制到 dir2,但它已被复制 4 次,则 dir2 将包含 4个MISC.txt文件: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不存在,上面的代码将创建它。

于 2012-09-22T11:26:15.627 回答
1

我每天都用它来备份文件。

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

希望对一些人有所帮助。斯科特……

于 2012-09-26T17:54:16.927 回答
0

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

于 2012-09-21T09:20:49.557 回答