2014-02-06 54 views

回答

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 
3

這裏有一個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 

(你也可以命名它的東西更短,但與標籤完成,而不是什麼大不了的事......)

+0

整潔。它在我測試Copy-FileWithTimestamp時起作用。 –

+0

我還沒有測試過它,但我希望它會失敗壯觀,如果你試圖在複製中使用通配符,我寫這個函數的方式... –

+0

我只是想通過報告我嘗試你的代碼來幫助社區它的工作。我的意思並不是暗示我正在爲生產網絡提供背書。 –

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()) 
    } 
} 
相關問題