如何使用powershell复制文件并保留原始时间戳

时间:2014-02-06 03:48:04

标签: powershell copy timestamp

我想将一些文件或文件夹从一个文件服务器复制到另一个文件服务器。但是,我想保留原始时间戳和文件属性,以便新复制的文件将具有原始文件的相同时间戳。提前感谢任何答案。

3 个答案:

答案 0 :(得分:4)

这是一个powershell函数,它可以做你所要求的......它绝对没有完整性检查,所以告诫者 ......

function Copy-FileWithTimestamp {
[cmdletbinding()]
param(
    [Parameter(Mandatory=$true,Position=0)][string]$Path,
    [Parameter(Mandatory=$true,Position=1)][string]$Destination
)

    $origLastWriteTime = ( Get-ChildItem $Path ).LastWriteTime
    Copy-Item -Path $Path -Destination $Destination
    (Get-ChildItem $Destination).LastWriteTime = $origLastWriteTime
}

运行加载后,您可以执行以下操作:

Copy-FileWithTimestamp foo bar

(你也可以将它命名为更短的东西,但是选项卡完成,不是那么大的交易...)

答案 1 :(得分:1)

如果您对两步解决方案没问题;那么

  • 首先将文件从源文件复制到dest
  • 遍历每个文件;以及每个文件的每个属性
  • 将属性从源复制到目标

尝试使用此技术将文件属性从一个文件复制到另一个文件。 (我用LastWriteTime说明了这一点;我相信你可以为其他属性扩展它。)

#Created two dummy files
PS> echo hi > foo
PS> echo there > bar

# Get attributes for first file
PS> $timestamp = gci "foo"
PS> $timestamp.LastWriteTime

06 February 2014 09:25:47

# Get attributes for second file
PS> $t2 = gci "bar"
PS> $t2.LastWriteTime

06 February 2014 09:25:53

# Simply overwrite
PS> $t2.LastWriteTime = $timestamp.LastWriteTime

# Ta-Da!
PS> $t2.LastWriteTime

06 February 2014 09:25:47

答案 2 :(得分:0)

以下是如何复制时间戳属性权限

$srcpath = 'C:\somepath'
$dstpath = 'C:\anotherpath'
$files = gci $srcpath

foreach ($srcfile in $files) {
  # Build destination file path
  $dstfile = [io.FileInfo]($dstpath, '\', $srcfile.name -join '')

  # Copy the file
  cp $srcfile.FullName $dstfile.FullName

  # Make sure file was copied and exists before copying over properties/attributes
  if ($dstfile.Exists) {
    $dstfile.CreationTime = $srcfile.CreationTime
    $dstfile.LastAccessTime = $srcfile.LastAccessTime
    $dstfile.LastWriteTime = $srcfile.LastWriteTime
    $dstfile.Attributes = $srcfile.Attributes
    $dstfile.SetAccessControl($srcfile.GetAccessControl())
  }
}