将多个文件夹及其子文件夹批量复制到合并文件夹中

将多个文件夹及其子文件夹批量复制到合并文件夹中

我有一个X:\Export包含多个文件夹的文件夹:

X:\导出
+---导出1
| \---各种文件……
+---导出2
| \---… 和子文件夹
+---导出3
| \---ETC。
\---等等(名称多种多样)

每个“导出”文件夹都有相同的子目录结构,但它们包含不同的文件(可能存在一些名称冲突)。我想将所有子文件夹和X:\Export\Export1X:\Export\Export2X:\Export\Export3等文件复制到一个文件夹X:\Export\merged,并保留子目录结构。

我想做但无法正常工作的伪代码:

create new folder "merged"
for (every folder X in a given directory Y (i.e., X:\Export)
    copy every file in X keeping directory structure to "merged"
If conflict then overwrite

答案1

怎么样

@echo 关闭
md 合并
对于/f“delims=”%%f在('dir /b /ad')中执行(
    如果不是 %%f==merged xcopy "%%f" 合并 /s /y

/y选项会导致文件被覆盖而不要求确认。如果要复制空子目录,请替换/s为。/e


附加说明:运行for /f "options"(optional) variable in ('command')命令,捕获输出,将该输出中的标记(字符串)分配给变量,然后运行do​​. 后的命令。  dir /b表示仅显示文件名(无属性、无...);dir /ad表示仅列出目录(无文件)。

的默认行为for /f是将每行输出中的第一个空格前的所有字符都取出来创建一个 token。"delims=" 选项告诉它取整行。这种偏执使得即使目录名中有空格,脚本也能正常工作。我可能可以使用xcopy %%f merged; ,但我需要用双引号%%f( ) 来处理包含空格的情况。xcopy "%%f" merged%%f

相关内容