2015-05-11 44 views
0

我想將活動文件夾中超過30分鐘的文件複製到存檔文件夾,並使用powershell保留文件夾結構。到目前爲止,我有這個命令,但是雖然它移動了文件和文件夾,但它將所有文件放入目標的頂層。使用powershell將文件和文件夾複製到存檔文件夾較舊30分鐘

get-childitem -Recurse -Path "c:\input folder" | where-object {$_.CreationTime -lt (get-date).AddMinutes(-90)} | copy-item -destination "E:\output archive" 

所以如果我的消息來源是這樣的 -

C:\輸入文件夾\ SUB1 \ filea.txt

C:\輸入文件夾\ SUB2 \ fileb.txt

c:\ input folder \ sub3 \ filec.txt

它目前看起來像這樣用我的命令在德stination這是錯誤的,因爲我希望它保留的文件夾結構 -

E:\輸出存檔\ SUB1 \

E:\輸出存檔\ SUB2 \

E:\輸出存檔\ SUB3 \

E:\輸出存檔\ filea.txt

E:\輸出存檔\ fileb.txt

E:\輸出弧蜂巢\ filec.txt

它應該是這樣的 -

C:\輸出存檔\ SUB1 \ filea.txt

C:\輸出存檔\ SUB2 \ fileb.txt

C:\輸出存檔\ SUB3 \ filec.txt

什麼是從我的命令丟失?

回答

1

複製文件時,您需要保留相對於源文件夾的部分路徑。通常複製語句不會這樣做,而是將文件從任何(源)子文件夾複製到目標文件夾。

與目標文件夾中的每個複製的項目的全名替換源文件夾中的一部分:

$src = 'C:\input folder' 
$dst = 'E:\output archive' 

$pattern = [regex]::Escape($src) 

$refdate = (Get-Date).AddMinutes(-90) 

Get-ChildItem -Recurse -Path $src | 
    Where-Object { $_.CreationTime -lt $refdate } | 
    Copy-Item -Destination { $_.FullName -replace "^$pattern", $dst } 
+0

這個工作,但我只注意到一個問題。如果有打開的文件,腳本將停止。可以跳過打開的文件或忽略錯誤? – user2369812

+0

@ user2369812「停止」,如「掛起」或「終止並顯示錯誤」?如果後者嘗試將'-ErrorAction SilentlyContinue'添加到'Copy-Item'中。 –

相關問題