2010-05-27 21:51:36 +0000 2010-05-27 21:51:36 +0000
43
43

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

在Linux上,我们可以简单的做到:

cp -pr directory

在Windows中怎么做?可以在Windows资源管理器中完成吗?有什么GUI工具建议吗?

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

Ответы (14)

23
23
23
2010-06-01 20:25:56 +0000

RoboCopy可以通过/DCOPY:T开关为目录保留mtime,但这只在Vista和更新版本中有效。它也可以保存ACLs。另外, FastCopy 可以被配置为保存目录mtimes,ACLs和 ADSes

21
21
21
2012-03-05 14:33:18 +0000

…或者你可以直接制作一个zip压缩包(压缩方式设置为 “存储"),然后将文件解压到你想复制的地方。日期/时间属性与原始文件相同。

10
10
10
2018-05-26 19:48:07 +0000

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 filesshow 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的维基百科页面(在这篇文章的顶部链接)列出了其他可以使用的软件。

6
6
6
2010-05-27 23:04:39 +0000

在Windows中没有简单的方法来做到这一点.  有几个程序声称能够保存文件的创建日期。
这里有几个程序可能会有这样的效果 http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html (链接已损坏;不在Wayback Machine中)。

仅使用Windows资源管理器是不可能的。如果你看一下CopyFile CopyFile函数(winbase.h)的文档,你会发现它避开了这个主题。  但是&nbsp CopyFile函数(Windows Developer Preview)(a 2012归档的相同URL)说:

文件时间语义

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

创建时间:如果目标文件已经存在,其创建时间将被保留,否则将被设置为当前系统时间。
最后修改时间:总是从源文件的修改时间复制过来。
最后访问时间:总是设置为当前系统时间。

4
4
4
2011-07-26 15:54:51 +0000

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,不过:

http://msmvps.com/blogs/martinzugec/archive/2008/03/03/ugly-bug-in-robocopy-ignoring-security-on-file-level.aspx

Robocopy版本XP027显然不再有这个bug,但它在Windows XP上不能工作。

3
3
3
2010-06-01 18:32:19 +0000

RoboCopy应该可以通过COPYALL开关来实现。你可以从 Microsoft Technet 抓取GUI版本。

1
1
1
2014-10-19 01:19:44 +0000

到目前为止,对我来说,最简单的方法是 “发送到 "的方法。它不需要任何外部应用。根据我的经验,它保留了所有原始文件的属性。

我之前用的方法,是压缩/压缩文件夹的方法。虽然这肯定是要花费较长的时间,因为文件不仅要复制,还要进行处理和压缩,压缩和解压的时候都是如此。

%appdata%\Microsoft\Windows\SendTo 或者。C:\Users\ _______ \AppData\Roaming\Microsoft\Windows\SendTo

在你想要复制它们的文件夹中添加一个快捷方式,当你右击一个你想要复制的文件时,该项就会出现在你的sendto菜单中。

1
1
1
2012-12-06 02:51:42 +0000

FastCopy 可以做到这一点,而且是免费的。

1
1
1
2013-08-19 19:37:45 +0000
xcopy *.* C:\temp\Pics /c /d /e /h /i /k /q /r /s /x /y

我不知道是哪个开关维护了文件日期,但这是有效的。然后我把C:\temp\Pics目录压缩,它也像前面提到的那样维护文件日期。

0
0
0
2012-10-14 14:50:02 +0000

移动文件夹和目录很简单,而且还能保留创建日期。只需按住Shift键,拖动文件夹到新的位置(移动命令)。修改日期将是当前日期,但创建日期将保留原始日期。

0
0
0
2014-05-02 08:34:44 +0000

我使用

rsync -avu –modify-window=3602 source/directory/ target/directory/

(这实际上是作为一个从一个目录到另一个镜像的同步工具,而时间窗口选项是为了防止windows系统为了节省时间而将时钟移动1小时的问题。

在windows系统中的cygwin环境中,或者在windows系统中的linux虚拟机中安装windows驱动器(例如使用virtualbox)

NB cygwin和virtualbox都是免费的,可以让你在windows系统中或多或少地拥有linux的功能–它们都需要一点设置–尤其是virtualbox,但有很多好处….。

我自己的问题是文件有正确的时间,但目录没有。rsync解决了目录和文件的日期问题。

0
0
0
2014-01-01 07:59:10 +0000

xcopy可以很好的解决这个问题。只要指定/k标志就可以复制属性。

Syntax xcopy Source [Destination][可选参数]

xcopy命令可以将一个或多个文件或目录树从一个位置复制到另一个位置。xcopy命令包含在从Windows 95到Windows 8的所有版本的Windows中。

0
0
0
2014-08-12 14:57:58 +0000

这个命令为文件复制相同的时间戳。请注意,它并没有为文件夹本身做完全相同的时间戳。另外请注意,我在源文件(Temp1)和目标文件(Temp2)上都加了引号。这样做是为了防止路径中出现空格。我没有任何空格,但我想我应该在最坏的情况下加入它。

robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"

为了保持文件夹的时间戳也是一样的。

robocopy /E /copy:DAT /dcopy:DAT “C:\Temp1” “c:\Temp2”

0
0
0
2013-02-11 13:33:03 +0000

简单的方法来移动文件夹和保存创建日期和时间使用这些实用程序 http://lantechsoft.com/data-copy.html

另一个可以保存日期,同时复制文件。 http://technocomsolutions.com/data-copy-tool.html