【发布时间】:2012-10-30 03:33:36
【问题描述】:
有没有办法在 .bat 文件中递归地复制目录?有这样的例子吗?
【问题讨论】:
-
你的意思是 xcopy /s ?还是更高级的 robocopy?
-
这可能会对您有所帮助,尽管这会删除您可以轻松更改为复制而不是 daniweb.com/web-development/threads/61479/…
标签: batch-file copy
有没有办法在 .bat 文件中递归地复制目录?有这样的例子吗?
【问题讨论】:
标签: batch-file copy
我想尽可能地复制 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 管理员)
【讨论】:
查看xcopy,它将递归复制文件和子目录。
有示例,在页面下方的 2/3 处。特别有用的是:
要将所有文件和子目录(包括任何空子目录)从驱动器 A 复制到驱动器 B,请键入:
xcopy a: b: /s /e
【讨论】:
Copy-Item -Recurse。
阅读接受的答案的 cmets 后,我尝试了 robocopy 命令,该命令对我有用(使用 Windows 7 64 位 SP 1 中的标准命令提示符):
robocopy source_dir dest_dir /s /e
【讨论】:
/E 不暗示/S? copy subdirectories, including Empty ones.
/S 和 /E 根据 robocopy /? 帮助似乎暗示相反的事情 - s 是“非空的” e 是“空的”。我认为你应该选择一个。
robocopy 将返回退出代码 1。
您可以在 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?
【讨论】: