Robocopy /S 创建空文件夹

Robocopy /S 创建空文件夹

我试图阻止 robocopy 在复制时创建空文件夹。源文件夹不为空;但它们也没有要复制的新文件。然而,robocopy 却在目标上创建了它们。

我的目标是创建 1 天前的文件副本。但我希望避免在仅复制 4 个文件时在日志中看到 11,674 个新文件夹和条目...并且不要让磁盘中塞满另外 12k 个文件,我每天都会进行 4 到 50 个文件的增量备份。

我非常清楚 robocopy 的工作原理......并且我非常确定大多数设计团队会将其视为“功能”而不是“缺陷”,因此要求 MS 调查它基本上是没有意义的。

一种解决方法是使用 XCOPY,如下所示,但它需要计算和格式化合法日期:

E:\>xcopy C:\Users\Public\* E:\C_Users\Public\ /D:6-1-2018 /S /B /C /H /J /K /O /Y

有什么想法或建议吗?

下面是问题的一个示例,请注意创建的 Adob​​e AppData 层次结构全部为空:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Fri Jun 01 03:42:50 2018

   Source : C:\Users\Public\
    Dest : E:\20180601_Users_C\Public\

    Files : *.*

    Options : *.* /S /COPY:DATSO /B /NP /XJ /REG /MAXAGE:1 /MT:16 /R:3 /W:1 

      New Dir          2    C:\Users\Public\.idlerc\
      New Dir          0    C:\Users\Public\AppData\
      New Dir          4    C:\Users\Public\AppData\Local\
        New File            7603    Resmon.ResmonCfg     100%  
      New Dir          0    C:\Users\Public\AppData\Local\Adobe\
      New Dir          0    C:\Users\Public\AppData\Local\Adobe\AAMUpdater\
      New Dir          7    C:\Users\Public\AppData\Local\Adobe\AAMUpdater\1.0\
      New Dir          1    C:\Users\Public\AppData\Local\Adobe\AAMUpdater\1.0\Data\ 

    [...snip...]

    ------------------------------------------------------------------------------

                       Total    Copied   Skipped  Mismatch    FAILED    Extras
            Dirs :     11674     11674         0         0         0         0
           Files :    443686         4    443682         0         0         0
           Bytes :   1.789 t   53.26 m   1.789 t         0         0         0
           Times :   0:00:40   0:00:09                       0:00:00   0:00:05

           Ended : Fri Jun 01 03:43:09 2018
===========

答案1

一些东西。 。 。

  1. 看来您需要使用/MIR参数代替参数/S来确保目录一旦存在就不会被复制到目标位置。
    • 使用该/MIR参数意味着空目录将被复制到目标位置,因此这是一种权衡,以确保每次运行时不会再次复制已经存在的目录。有一个简单的解决方法可以快速删除目标位置中的空目录,这需要 在运行Robocopy <dest> <dest> /S /MOVE使用该参数的命令后直接运行。/MIR
  2. 如果你想省略目录Robocopy输出然后只需添加/NDL参数。

Robocopy 脚本

Robocopy "<Source>" "<Destination>" *.* /MIR /COPY:DATSO /B /NP /NDL /XJ /REG /MAXAGE:1 /MT:16 /R:3 /W:1
Robocopy <dest> <dest> /S /MOVE 

重要笔记:

  • 使用/MIR开关还意味着目标中不再存在于源中的文件和文件夹将从目标中清除

  • 每次脚本运行时复制空目录与每次脚本运行时复制相同的数千个目录到目标中已经存在的目录相比,这似乎是一个很小的代价,而且由于这些可以轻松快速地被删除,这似乎是一个明智的选择

  • Robocopy 命令Robocopy <dest> <dest> /S /MOVE会从目标中删除空目录,并使用目标位置作为源位置和目标位置


更多资源

  • Robocopy
  • Robocopy /?
    • /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).
      /MOVE :: MOVE files AND dirs (delete from source after copying).
      /NDL :: No Directory List - don't log directory names.
      

答案2

这是我最终做的事情(用你的用户名替换 Public):

@echo off
@rem - create decent date and filename strings
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (set mytime=%%a%%b)
set fname=E:\%mydate%_%mytime%_RClog_d.txt

@rem - copy newer files to a new timestamped tree
robocopy C:\Users\Public\ E:\%mydate%_Users_C\Public\ /XJD /ZB /S /COPY:DATSO /R:3 /W:1 /MAXAGE:7 /NC /NDL /FP /LOG:%fname% /NP 

@rem - and this removes the empty folders created by the command above
robocopy E:\%mydate%_Users_C\Public\ E:\%mydate%_Users_C\Public\ /S /MOVE /NDL /LOG:NUL /NP 

磁盘上显示的内容如下:

06/04/2018  01:00 PM         9,644,168 20180604_0241_RClog.txt
06/10/2018  02:34 AM           563,342 20180610_0230_RClog_d.txt
06/10/2018  02:30 AM    <DIR>          20180610_Users_C
06/10/2018  02:30 AM    <DIR>          20180610_Users_D
06/17/2018  02:30 AM           394,755 20180617_0230_RClog_d.txt
06/17/2018  02:30 AM    <DIR>          20180617_Users_C
06/17/2018  02:30 AM    <DIR>          20180617_Users_D
06/24/2018  02:30 AM           833,475 20180624_0230_RClog_d.txt
06/24/2018  02:30 AM    <DIR>          20180624_Users_C
06/24/2018  02:30 AM    <DIR>          20180624_Users_D
07/01/2018  02:31 AM           891,884 20180701_0230_RClog_d.txt
07/01/2018  02:30 AM    <DIR>          20180701_Users_C
07/01/2018  02:31 AM    <DIR>          20180701_Users_D
09/17/2017  01:09 AM    <DIR>          Users_C
06/04/2018  12:32 PM    <DIR>          Users_D

相关内容