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

net*_*ope 55 windows file-management

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

cp -pr directory

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

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

小智 28

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

  • 这并不总是有效。例如,使用 7-zip,使用 7zip 压缩不会保留文件时间之一(我忘记了哪个)。它不保留任何目录时间(我记得),使用 ZIP,您可以保留创建时间和修改时间,但 7zip 仅保留部分时间,具体取决于您的解压缩方式:是拖放还是从程序菜单中提取. 好好测试,年轻的蚱蜢。 (3认同)
  • 非常感谢,这对我很有用。我使用了 7zip,采用 ZIP 格式(创建日期不以 7Z 格式保存)。 (3认同)

afr*_*ier 24

RoboCopy 可以使用 /DCOPY:T 开关保留目录的 mtime,但这仅适用于 Vista 和更新版本。它还可以保留 ACL。或者,可以将FastCopy配置为保留目录 mtimes、ACL 和ADSes

  • @Pacerier,因为问题不是关于镜像树,而是关于复制文件和文件夹并尽可能多地保留元数据。`/mir` 不仅从目标文件夹中删除数据,您还需要 `/dcopy:t` 来保存目录 mtimes 和 `/copyall` 来保存不仅仅是文件时间戳。 (2认同)

She*_*man 22

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

Wikipedia,它可以与以下一组选项一起使用以保留文件目录时间戳以及其他属性:

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 -开关和示例/

我最近运行的命令示例:
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在真正执行命令之前添加标志来测试命令。通过这种方式,您可以验证它不会复制(或删除)您不想要的任何目录/文件,并且您的命令中没有错误。

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

运行上面的示例命令后,该目录不可见!(即使show hidden filesshow system files在 Windows 10 中进行了检查!)根据https://serverfault.com/a/455029/399723的以下命令修复了此问题:

attrib -h -s C:\D_backup
Run Code Online (Sandbox Code Playgroud)

或者,/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

其他软件:

或者,如果您不想使用命令行,可以下载robocopyGUI 版本

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

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


Dai*_*tsu 6

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

仅使用 Windows 资源管理器是不可能的。如果您查看 CopyFile, CopyFile 函数 (winbase.h)的文档 ,您会发现它避免了该主题。但是 CopyFile 函数(Windows 开发人员预览版) (同一 URL 的 2012 存档)说:

文件时间语义

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

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