将文件副本从源回滚到目标

将文件副本从源回滚到目标

如何将文件副本从源回滚到目标?让我给出基于 Magento 的示例(但这并不重要)。

当我安装新模块时,我会得到一个 zip 文件,我会将其解压到一个临时文件夹中,例如 c:\temp\my_new_module

我从 zip 中提取了一堆目录和文件。其中一些目录映射了 Magento 目录,一些是新目录。

然后我将文件从主路径(c:\temp\my_new_module)复制到 magento 根路径(c:\magento)

假设我几天后测试该模块,但我不喜欢它,我该如何回滚 DESTINATION?即如何从 DESTINATION=c:\magento 中删除:

  1. 来自 c:\magento 的新目录和新文件(从 SOURCE 复制)
  2. 将新文件添加到现有 Magento 目录中

这意味着我想保留目标中复制粘贴前就已经存在的文件和文件夹!我不想触碰源中的任何内容(无论是删除还是其他)。

我正在寻找一个脚本来执行该操作(命令行),我猜它会比较源和目标。

For Each File from SOURCE
    if FILE_EXIST in DESTINATION 
    Then DELETE FILE From DESTINATION
    If DIRECTORY_IS_EMPTY in DESTINATION 
    THEN DELETE DIRECTORY in DESTINATION

(后者将保留非空目录,即复制之前创建的目录)

谢谢你的帮助,罗德

答案1

我的问题是,几天后,我怎样才能自动删除我已复制的所有文件?

您可以使用Robocopy查看 [源] 目录中的所有文件和子文件夹,并针对另一个 [目标] 目录递归检查源中已存在的相同文件。

如果它发现这些相同的文件已经存在于目标(您将这些文件复制到的文件夹)中,您可以使用选项让它从源中删除文件,它会以递归方式执行此操作,但不删除任何文件夹。

您还可以使用选项让其不复制源中不在目标目录中的文件,因为您将手动完成复制操作。

您只需要从源中递归删除目标中已存在的文件。您将手动完成将新文件从源复制到目标的操作,并且只需要一些有助于简化清理源中已手动复制到目标的文件的操作。


Robocopy 脚本

我测试了上面列出的场景,它正如我解释的那样工作,并且正如预期的那样,所以这个方法已经过测试

@ECHO ON
SET Source=F:\TestSource
SET Destination=F:\TestDest

ROBOCOPY "%Source%" "%Destination%" *.* /S /IS /PURGE /MOV /NOCOPY
GOTO EOF

更多资源

         /S :: copy Subdirectories, but not empty ones.
    /NOCOPY :: COPY NO file info (useful with /PURGE).
     /PURGE :: delete dest files/dirs that no longer exist in source.
       /MOV :: MOVe files (delete from source after copying).
        /IS :: Include Same files.

相关内容