用于递归复制目录的批处理文件

sar*_*ake 108 copy batch-file

有没有办法在.bat文件中递归复制目录?如果是这样,一个例子会很棒.谢谢.

lc.*_*lc. 161

查看xcopy,它将递归复制文件和子目录.

有一些例子,页面下方是2/3.特别有用的是:

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

xcopy a: b: /s /e

  • 您可能还希望包含/ y标志"禁止提示确认您要覆盖现有目标文件". (14认同)
  • 'xcopy'不是一个好主意,因为它们因**内存不足错误**而闻名.尝试使用'robocopy' (11认同)
  • [这](http://ss64.com/nt/xcopy.html)说xcopy已被弃用,应该使用robocopy. (8认同)
  • @Rahul嗯真的吗?我从来没有见过这个,但是xcopy*在黑暗时代就已经存在了.您也许可以在PowerShell中执行`Copy-Item -Recurse`. (6认同)

Ant*_*dei 58

在阅读了接受的答案的评论之后,我尝试了robocopy命令,它对我有用(使用Windows 7 64位SP 1的标准命令提示符):

robocopy source_dir dest_dir /s /e
Run Code Online (Sandbox Code Playgroud)

  • 从来不知道'robocopy'是Windows 7中的内置命令!谢谢你的回答,非常有帮助和强大:) (5认同)
  • 不是`/ E`意味着`/ S`?`copy子目录,包括Empty子目录 (4认同)
  • 嗯`/ S`和`/ E`似乎暗示相反的东西根据robocopy` /?`help - s是"不是空的"e是"空的".我想你应该选择一个. (3认同)
  • 请注意,如果成功复制了一个或多个文件,`robocopy`将返回退出代码1。 (3认同)

Aac*_*ini 14

您可以在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
Run Code Online (Sandbox Code Playgroud)

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

  • 好主意,但不是你的程序将源目录中的所有文件复制到单个目标目录而不保留文件夹层次结构? (3认同)

小智 5

我想尽可能地复制 Unix/Linux cp -r。我想出了以下内容:

xcopy /e /k /h /i srcdir destdir

标志说明:

/e复制目录和子目录,包括空目录。
/k复制属性。普通 Xcopy 将重置只读属性。
/h还复制隐藏文件和系统文件。
/i如果destination 不存在并且复制多个文件,则假定destination 是一个目录。


我将以下内容制作成一个批处理文件 ( cpr.bat),这样我就不必记住这些标志:

xcopy /e /k /h /i %*

用法:cpr srcdir destdir


您可能还想使用以下标志,但我没有:
/q安静。复制时不显示文件名。
/b复制符号链接本身与链接的目标。(需要 UAC 管理员)
/o复制目录和文件 ACL。(需要 UAC 管理员)