复制文件夹时覆盖但不合并文件

复制文件夹时覆盖但不合并文件

我有一个根目录C:\ROOT,该目录包含许多子文件夹,其名称如下:

C:\ROOT\Folder0001
C:\ROOT\Folder0002
C:\ROOT\Folder0003
...
C:\ROOT\Foldernnnn

每个子文件夹包含一定数量的文件。必须处理所有文件和子文件夹。

C:\ROOT我正在准备一个 Windows Shell 脚本来备份整个树D:\ROOT,这必须按照以下“完全覆盖,而不是合并”方案完成:

  • 如果C:\ROOT\Folderxxxx 下尚不存在子文件夹D:\ROOT,则必须创建该子文件夹,并将原始子文件夹中的所有文件复制到目标子文件夹。

  • 如果C:\ROOT\Folderxxxx子文件夹已存在于 下D:\ROOT,则必须先删除目标子文件夹中的所有文件,然后像上一种情况一样将原始子文件夹复制到目标子文件夹。也就是说,我需要完全覆盖子目录,而不是合并。

现在,感谢您的帮助,我找到了如何删除目标子文件夹中的所有文件:

if NOT ERRORLEVEL 1 del "%%i\*.*"

并进入根目录:

@echo off
CD /d "C:\ROOT"
CLS
FOR /R "C:\ROOT\" %%i IN (a*.*) DO
(
 xcopy /s /v /y "C:\ROOT" "D:\ROOT\"
 echo %%i
)

我遇到的问题是如何区分创建新子文件夹和覆盖现有子文件夹。

查看此网站上提供的信息,我发现了如何检查文件夹是否存在

if not exist ...

所以我认为我应该使用这样的东西:

for /r /d %%i in (*)do chDir /d "%%~dpnxi" && =;(
 xcopy ".\%%~nxi.*" | find /i ".*"
 if exist ".\\%%~nxi.*" 2>nul del ".\*.*"
);=

但这是基于文件而不是子文件夹的,而且我不知道如何将各个部分放在一起。

如果有人再次伸出援手,我提前表示感谢。

相关内容