【问题标题】:Automatically copy files without overwriting, but creating numbered ones instead自动复制文件而不覆盖,而是创建编号的文件
【发布时间】:2012-09-21 09:11:37
【问题描述】:

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

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

有什么办法吗?

提前致谢。

【问题讨论】:

    标签: batch-file vbscript xcopy robocopy


    【解决方案1】:

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

    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% 部分从存储在变量%time% 中的时间字符串中提取2位数字。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不是想听起来很蠢什么的,但是我必须用起始目录替换 %1 并用目标替换 %2 吗?我应该在其他参数中添加什么?谢谢:)
      • @user1688322 - 不,您不需要编辑代码。 %1、%2 %3 等是传递给批处理文件的参数的内置占位符。因此,如果您输入zcopy fromDir toDir,则%1 == fromDir%2 == toDir%3 留空。
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-05-12
          • 1970-01-01
          • 1970-01-01
          • 2015-06-20
          • 2012-08-15
          • 1970-01-01
          • 1970-01-01
          • 2015-07-25
          • 2023-04-09
          相关资源
          最近更新 更多