我有一个根目录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 ".\*.*"
);=
但这是基于文件而不是子文件夹的,而且我不知道如何将各个部分放在一起。
如果有人再次伸出援手,我提前表示感谢。