在Windows中复制文件时,如何保存文件属性?
在Linux上,我们可以简单的做到:
cp -pr directory
在Windows中怎么做?可以在Windows资源管理器中完成吗?有什么GUI工具建议吗?
如果我能保留NTFS的权限和创建/修改/访问时间,那是最好的。至少,我需要保留文件和目录的修改日期。Windows资源管理器的副本不保留目录的修改日期。
在Linux上,我们可以简单的做到:
cp -pr directory
在Windows中怎么做?可以在Windows资源管理器中完成吗?有什么GUI工具建议吗?
如果我能保留NTFS的权限和创建/修改/访问时间,那是最好的。至少,我需要保留文件和目录的修改日期。Windows资源管理器的副本不保留目录的修改日期。
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
,其中
如果你只想保存日期和目录时间戳,但不希望复制空的子目录,也不希望保存其他属性,那么你可以使用:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S
其中/S
复制_非空子目录
要查看完整的语法,在命令提示符下输入robocopy /?
,或者看看这些博客文章。 https://ss64.com/nt/robocopy.html an https://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
注意到排除两个子目录需要使用两次/XD
标志。另外,第二个目录排除使用了引号,因为目录名中有空格。
最后,你可以添加/L
标志来测试命令,然后再真正执行。这样你就可以验证它不会复制(或删除)任何你不想要的目录/文件,并且你的命令中没有错误。
运行上面的示例命令后,目录不可见! (即使在Windows 10中检查了show hidden files
和show system files
!)下面的命令按照 https://serverfault.com/a/455029/399723 解决了这个问题。
attrib -h -s C:\D_backup
另外,添加/A-:SH
“unsets the Hidden Attribute from System files",这样可以防止目录首先被隐藏,如 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
另外,如果你不想使用命令行,你可以下载一个 GUI 版本的 robocopy 。
另一个windows实用程序是 XCopy ,虽然它包含在windows 10中,但它被废弃了。请看链接中的 "陷阱"。
RoboCopy的维基百科页面(在这篇文章的顶部链接)列出了其他可以使用的软件。
在Windows中没有简单的方法来做到这一点. 有几个程序声称能够保存文件的创建日期。
这里有几个程序可能会有这样的效果 http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html (链接已损坏;不在Wayback Machine中)。
仅使用Windows资源管理器是不可能的。如果你看一下CopyFile CopyFile函数(winbase.h)的文档,你会发现它避开了这个主题。 但是  CopyFile函数(Windows Developer Preview)(a 2012归档的相同URL)说:
文件时间语义
这篇文章应该记录有关文件创建/修改/访问时间的语义。
创建时间:如果目标文件已经存在,其创建时间将被保留,否则将被设置为当前系统时间。
最后修改时间:总是从源文件的修改时间复制过来。
最后访问时间:总是设置为当前系统时间。
Synchronize It!3.5保留了所有时间戳(文件和文件夹,修改和创建)。这是我所知道的唯一一个在Windows XP上的软件,除了Robocopy,我试过很多软件都能做到完美无瑕。但要注意,它可能会与使用FlashGet或Orbit Downloader等软件下载的源文件产生损坏的文件(产生的文件有相同的大小,但实际上只复制了25kB - 其余的都是零)。我问软件的创建者是否能找出原因,但他毫无头绪;我猜这与此类软件以小包的方式下载文件有关(旨在优化速度),而我的数据分区被大量碎片化。
Robocopy XP026确实包含在Windows Vista中,但在Windows XP上也能使用。搜索 “Robocopy XP026",或者我可以在这里发送文件,因为它不是很容易找到。或者你可以安装Robocopy GUI,然后在System32文件夹中搜索robocopy.exe
文件,这样就可以在命令行中使用它。我的文件是208kB,版本号是5.1.2600.26。
"备份模式 "似乎有一个bug,不过:
Robocopy版本XP027显然不再有这个bug,但它在Windows XP上不能工作。
RoboCopy应该可以通过COPYALL开关来实现。你可以从 Microsoft Technet 抓取GUI版本。
到目前为止,对我来说,最简单的方法是 “发送到 "的方法。它不需要任何外部应用。根据我的经验,它保留了所有原始文件的属性。
我之前用的方法,是压缩/压缩文件夹的方法。虽然这肯定是要花费较长的时间,因为文件不仅要复制,还要进行处理和压缩,压缩和解压的时候都是如此。
%appdata%\Microsoft\Windows\SendTo
或者。C:\Users\ _______ \AppData\Roaming\Microsoft\Windows\SendTo
在你想要复制它们的文件夹中添加一个快捷方式,当你右击一个你想要复制的文件时,该项就会出现在你的sendto
菜单中。
移动文件夹和目录很简单,而且还能保留创建日期。只需按住Shift键,拖动文件夹到新的位置(移动命令)。修改日期将是当前日期,但创建日期将保留原始日期。
我使用
rsync -avu –modify-window=3602 source/directory/ target/directory/
(这实际上是作为一个从一个目录到另一个镜像的同步工具,而时间窗口选项是为了防止windows系统为了节省时间而将时钟移动1小时的问题。
在windows系统中的cygwin环境中,或者在windows系统中的linux虚拟机中安装windows驱动器(例如使用virtualbox)
NB cygwin和virtualbox都是免费的,可以让你在windows系统中或多或少地拥有linux的功能–它们都需要一点设置–尤其是virtualbox,但有很多好处….。
我自己的问题是文件有正确的时间,但目录没有。rsync解决了目录和文件的日期问题。
简单的方法来移动文件夹和保存创建日期和时间使用这些实用程序 http://lantechsoft.com/data-copy.html
另一个可以保存日期,同时复制文件。 http://technocomsolutions.com/data-copy-tool.html