我有一个X:\Export
包含多个文件夹的文件夹:
X:\导出 +---导出1 | \---各种文件…… +---导出2 | \---… 和子文件夹 +---导出3 | \---ETC。 \---等等(名称多种多样)
每个“导出”文件夹都有相同的子目录结构,但它们包含不同的文件(可能存在一些名称冲突)。我想将所有子文件夹和X:\Export\Export1
、X:\Export\Export2
、X:\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