如何在Windows中使用xcopy复制目录结构

时间:2013-06-01 20:34:41

标签: windows batch-file scripting xcopy

我有一个包含文件夹列表的文本文件。我的文本文件如下所示:

"D:\old\FOLDER1"  
"D:\old\FOLDER2"  
"D:\old\FOLDER3"  
"D:\old\FOLDER4"  
"D:\old\FOLDER5"  

所有这些文件夹都有子文件夹和文件

我想要做的是使用xcopy复制FOLDER1FOLDER2FOLDER3 FOLDER4FOLDER5复制文件夹,复制这些文件夹的结构 所以在输出中,我想得到

D:\output\bkup\FOLDER1\............Including all subfolders and files D:\output\bkup\FOLDER2\............Including all subfolders and files D:\output\bkup\FOLDER3\.......... Including all subfolders and files 
D:\output\bkup\FOLDER4\............Including all subfolders and files 
D:\output\bkup\FOLDER5\............ Including all subfolders and files 

我写了下面的脚本,适用于一个文件夹

set sourceFolder="D:\old\FOLDER5"
set destinationFolder=%sourceFolder:~7,-1%
echo %destinationFolder%
xcopy /s /e /i /h /r /y %sourceFolder%  "D:\output\bkup%destinationFolder%"

但由于要复制的目录数为100+,我喜欢使用for循环或传递目录列表以复制到文本文件中,这就是我不知道如何处理它。

请帮助我,我不是批处理文件写作的专家。

3 个答案:

答案 0 :(得分:1)

您可以使用/ f来逐行读取(如果需要,解析)文本文件。使用“delims =”来读取整个行。不要忘记添加引号以防止出现多个参数并删除子过程中的引号

for /f "delims=" %%a in (yourtextfile.txt) do call :docopy "%%a"
goto :eof

:docopy
set sourceFolder=%~1
set destinationFolder=%sourceFolder:~7,-1%
echo %destinationFolder%
xcopy /s /e /i /h /r /y %sourceFolder%  "D:\output\bkup%destinationFolder%" 
goto :eof

答案 1 :(得分:1)

尝试robocopy,它可以满足您的需求,适用于XP教授或更新版本:

set "sourceFolder=D:\old\FOLDER5"
set "destinationFolder=%sourceFolder:~7,-1%"
robocopy "%sourceFolder%" "%destinationFolder%" /MIR

这会在“%destinationFolder%”处生成完整的MIRror。

如果要使用xcopy从文本文件中复制文件夹,请使用以下代码:

set "sourceFolder=D:\old\FOLDER5"
set "destinationFolder=%sourceFolder:~7,-1%"
for /f "usebackqdelims=" %%i in ("My File With Source Folders.txt") do xcopy /seihry "%%i" "D:\output\bkup%destinationFolder%"

包含源文件夹的文本文件为"My File With Source Folders.txt"

答案 2 :(得分:0)

从此Microsoft forum线程中获取解决方案:

要复制另一个文件夹的结构而不复制文件。

将“ ProjectsX”文件夹替换为SVN目录中的“ ProjectsY”

/ E -包含空目录

/ XF * -排除所有文件

/ XD“ .svn”“ obj” -排除指定的目录

D:\SVN>robocopy ProjectsX ProjectsY /E /XF * /XD ".svn" "obj"

感谢上一个answer by Endoro中对 robocopy 的提示。但是您实际上不需要为此镜像。