【问题标题】:Batch file to copy directories recursively批处理文件以递归方式复制目录
【发布时间】:2012-10-30 03:33:36
【问题描述】:

有没有办法在 .bat 文件中递归地复制目录?有这样的例子吗?

【问题讨论】:

标签: batch-file copy


【解决方案1】:

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

xcopy /e /k /h /i srcdir destdir

标志说明:

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


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

xcopy /e /k /h /i %*

用法:cpr srcdir destdir


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

【讨论】:

    【解决方案2】:

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

    有示例,在页面下方的 2/3 处。特别有用的是:

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

    xcopy a: b: /s /e

    【讨论】:

    • 您可能还希望将 /y 标志包含在“禁止提示确认您要覆盖现有目标文件”中。
    • 'xcopy' 不是一个好主意,因为它们以 Insufficient memory error 着称。尝试使用“robocopy”
    • @Rahul 真的吗?我从未见过,但 xcopy 自黑暗时代以来肯定就存在了。你也可以在 PowerShell 中使用Copy-Item -Recurse
    • 不幸的是,这种行为很常见:)。如果您经常看到这种情况发生,特别是如果您希望复制大量数据,例如大量数据。
    • This 表示 xcopy 已被弃用,应该使用 robocopy。
    【解决方案3】:

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

    robocopy source_dir dest_dir /s /e
    

    【讨论】:

    • 从来不知道 'robocopy' 是 Windows 7 中的内置命令!感谢您的回答,非常有帮助且功能强大:)
    • /E 不暗示/Scopy subdirectories, including Empty ones.
    • /S/E 根据 robocopy /? 帮助似乎暗示相反的事情 - s 是“非空的” e 是“空的”。我认为你应该选择一个。
    • 对于大多数用户来说,我认为 /e 就足够了(包括空目录)。
    • 请注意,如果成功复制了一个或多个文件,robocopy 将返回退出代码 1。
    【解决方案4】:

    您可以在 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 Batch File Looping Through Directories to Process Files?

    【讨论】:

    • 好主意,但您的程序不是将所有文件从源目录复制到单个目标目录而不保留文件夹层次结构吗?
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多