批处理文件以递归方式复制目录


121

有没有一种方法可以在.bat文件中递归复制目录?如果是这样,那么一个例子将是很好的。谢谢。


2
你的意思是xcopy / s?还是更高级的robocopy?
rene 2012年

这可以帮助你,尽管这将会删除您可以轻松地更改复制,而不是daniweb.com/web-development/threads/61479/...
乔治Chitiga

Answers:


176

查看xcopy,它将以递归方式复制文件和子目录。

有示例,下一页2/3。特殊用途是:

要将所有文件和子目录(包括任何空的子目录)从驱动器A复制到驱动器B,请键入:

xcopy a: b: /s /e


16
您可能还希望/ y标志也包含在“禁止提示您确认要覆盖现有目标文件”中。
马修·洛克

11
'xcopy'不是一个好主意,因为它们以内存不足错误而闻名。尝试使用“ robocopy”
Rahul

6
@Rahul Hmm真的吗?我从未见过,但是自从黑暗时代开始,xcopy 已经存在了。您可能也可以Copy-Item -Recurse在PowerShell中进行操作。
lc。

1
不幸的是,这种行为非常普遍:)。如果经常发生这种情况,特别是如果您希望复制大量数据(如演出数据),则尤其如此。
拉胡尔2014年

10
表明xcopy已被弃用,应使用robocopy。
Mike HR

71

阅读接受的答案的注释后,我尝试了robocopy命令,该命令对我有用(使用Windows 7 64位SP 1中的标准命令提示符):

robocopy source_dir dest_dir /s /e

5
不知道“ robocopy”是Windows 7中的内置命令!感谢您的回答,非常有帮助且功能强大:)
Anmol Saraf

5
/E暗示/S吗?copy subdirectories, including Empty ones.
mbomb007 '16

4
/S,并/E似乎在暗示根据ROBOCOPY对立的事物/?的帮助- s是“不空的” E是“空的”。我认为您应该只选择一个。
Stuart Brock

1
对于大多数用户,我认为执行/ e(包括空目录)就足够了。
phsource

3
请注意,robocopy如果成功复制一个或多个文件,则返回退出代码1。
dougnorton

15

您可以在Batch中编写一个递归算法,使您可以精确控制在每个嵌套子目录中的操作:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
copy *.* C:\dest\dir
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b

Windows批处理文件通过目录循环处理文件?


4
好主意,但是您的程序不是在不保留文件夹层次结构的情况下将所有文件从源目录复制到单个目标目录吗?
Jean-Francois T.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.