在 Windows 中复制文件时如何保留文件属性?

在 Windows 中复制文件时如何保留文件属性?

在 Linux 上,我们可以简单地执行以下操作:

cp -pr directory

在 Windows 中如何做到这一点?可以在 Windows 资源管理器中完成吗?有什么 GUI 工具建议吗?

如果我能保留 NTFS 权限和创建/修改/访问时间,那就最好了。至少,我需要保留文件的修改日期目录。Windows 资源管理器的副本不会保留目录的修改日期。

答案1

在 Windows 中没有简单的方法可以做到这一点。有几种程序声称能够保留文件的创建日期。
以下是一些可能有用的程序http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html  (链接已损坏;不在 Wayback Machine 中)。

仅使用 Windows 资源管理器是不可能的。如果你查看 CopyFile 的文档, CopyFile 函数(winbase.h),你会发现它避开了这个话题。但是 CopyFile 函数(Windows 开发人员预览版) (同一 URL 的 2012 年档案)内容如下:

文件时间语义

本文应记录与文件创建/修改/访问时间有关的语义。

创建时间:如果目标文件已经存在,则其创建时间为保存,否则设置为当前系统时间。
上次修改时间:始终从源文件的修改时间复制。
上次访问时间:始终设置为当前系统时间。

答案2

Robocopy 命令行工具(大多数 Windows 版本都附带)
在我的 Windows 10 机器上,它位于C:\Windows\System32

维基百科,它可以与以下选项一起使用来保存文件目录时间戳,以及其他属性:

Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0

  • /DCOPY:T保留原有目录的时间戳(需要 XP026 或更高版本)
  • /E:递归复制目录,包括空目录
  • /R:0:不重试锁定的文件(失败副本的重试次数默认值为 100 万),

  • /COPYALL:复制所有文件信息,
    (相当于/COPY:DATSOU,其中

    • D=数据,
    • A=属性,
    • T=文件时间戳
    • S=安全=NTFS ACL,
    • O=所有者信息,
    • U=审计信息),

如果你仅有的想要保留日期和目录时间戳,但不是想要复制空子目录并执行不是想要保留其他属性,那么您可以使用:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

副本/S非空子目录

要查看完整语法,请robocopy /?在命令提示符下键入,或查看以下博客文章:https://ss64.com/nt/robocopy.htmlhttps://techjourney.net/robocopy-syntax-command-line-switches-and-examples/

我最近运行的一个命令示例:
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

请注意,排除 2 个子目录需要/XD使用两次标志。此外,第二个目录排除使用引号,因为目录名称中有空格。

最后,您可以添加/L标志,在实际执行命令之前测试该命令。这样,您可以验证它不会复制(或删除)您不想要的任何目录/文件,并且命令中没有错误。

编辑:从根目录(又名驱动器)复制到文件夹(非根目录)时遇到问题

运行上述示例命令后,目录不可见!(尽管在 Windows 10 中show hidden filesshow system files检查!)以下命令https://serverfault.com/a/455029/399723修复了这个问题:

attrib -h -s C:\D_backup

或者,添加/A-:SH“取消设置系统文件的隐藏属性”,这样可能会首先阻止目录被隐藏,如https://serverfault.com/a/565804/399723。 也可以看看https://ss64.com/nt/robocopy.html
讨论进一步阐明了此选项作为解决方案的重要性。

Robocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

其他软件:

或者,你可以下载robocopy 的 GUI 版本如果您不想使用命令行。

另一个 Windows 实用程序是复制,尽管它包含在 Windows 10 中,但已被弃用。请参阅链接以了解陷阱。

RoboCopy 的维基百科页面(链接于本文顶部)列出了其他可以使用的软件。

答案3

...或者您可以创建一个 zip 存档(将压缩方法设置为“存储”),然后将文件解压到您想要复制它们的位置。日期/时间属性与原始文件相同。

答案4

RoboCopy 应该能够使用 COPYALL 开关来实现这一点。您可以从以下位置获取 GUI 版本微软技术网

相关内容