2016-10-22 60 views
0

我搜索過,我試過了。我知道我不擅長PowerShell,但我開始做這件事情是不可能的。複製和存檔目錄以及只有x以前的文件天

我想要做的是移動我X:\數據的X天的所有內容並歸檔它們。

聽起來很容易..但如果 C:\ data \ Subject包含從2015年到當前的文件。我只想存檔X天的文件。所以新的歸檔路徑將是C:\ DataBackup,並在那裏它將包含所有文件夾的C:\數據,但它們中的唯一文件將是X天。

這是我用來複制和存檔的文件夾/文件,但它並沒有考慮到年齡的..如果它這樣做,我想有它刪除它由C移動文件:數據,因爲他們現在backedup在C:\ dataBackup

$sourcePath = "C:\Data" 
$path = "C:\DataBackup" 

$source = Get-ChildItem -Path $sourcePath -Directory 

Add-Type -assembly "system.io.compression.filesystem" 

Foreach ($s in $source) 

{ 

    $destination = Join-path -path $path -ChildPath "$($s.name).zip" 


    If(Test-path $destination) {Remove-item $destination} 


    [io.compression.zipfile]::CreateFromDirectory($s.fullname, $destination)} 

回答

2

你可以這樣修改腳本:

$sourcePath = "C:\Users\kim_p\Downloads" 
$path = "C:\DataBackup" 
$tempPath = "C:\DataTemp" 

# Any file younger than $limit will be excluded from the zip archive 
$limit = (Get-Date).AddDays(-10) 

$source = Get-ChildItem -Path $sourcePath -Directory 

# Make sure the temporary folder doesn't exist 
If(Test-path $tempPath) {Remove-item $tempPath -Recurse} 

Add-Type -assembly "system.io.compression.filesystem" 

Foreach ($s in $source) 
{ 
    $destination = Join-path -path $path -ChildPath "$($s.name).zip" 

    If(Test-path $destination) {Remove-item $destination} 

    # Create the temporary directory 
    New-Item $tempPath -Type Directory 

    # Copy files older than the date set in $limit to the temporary folder $tempPath 
    Get-ChildItem -Path $s.fullname -Recurse -Force | Where-Object { $_.CreationTime -lt $limit } | Copy-Item -Destination $tempPath 

    # Create the zip archive using the files copied to $tempPath 
    [io.compression.zipfile]::CreateFromDirectory($tempPath, $destination) 

    # Remove the temporary folder and all the files inside of it 
    Remove-item $tempPath -Recurse 

    # Remove the source files added to the archive 
    Get-ChildItem -Path $s.fullname -Recurse -Force | Where-Object { $_.CreationTime -lt $limit } | Remove-Item -Recurse -Force 
} 

我添加了一個名爲的文件夾保存將通過CreateFromDirectory添加到存檔的文件。首先將文件名爲$limit的文件複製到臨時文件夾$tempPath,然後CreateFromDirectory$tempPath作爲其參數執行。

終於$tempPath被刪除,因爲它不再需要。

請注意,在對任何重要的文件執行此操作之前,請執行一些簡單的測試。在腳本的最後,它將刪除它之前存檔的文件。

在我自己的測試中,它似乎工作,但我建議你也驗證一下。

+0

我的上帝是驚人的。非常感謝你做的這些。我有另一個腳本與臨時目錄,但無法弄清楚如何刪除源文件,並保持該文件夾,並不認爲我會永遠!再次感謝。 – JonnyBoy

1

如果您使用PowerShell 5.0版或上級,試試這個:

$sourcePath = "C:\Users\kim_p\Downloads" 
    $tempPath = "C:\DataBackup" 
    $limit = (Get-Date).AddDays(-10) 

    remove-item -Path $tempPath -Force -ErrorAction Ignore -Recurse 

    Get-ChildItem -Path $sourcePath -Recurse | Where {$_.PSISContainer -eq $true -or ($_.PSISContainer -eq $false -and $_.CreationTime -lt $limit) } | %{ Copy-Item $_.FullName -Destination $_.FullName.Replace($sourcePath, $tempPath) -Recurse -Force} 
    Get-ChildItem -Path $tempPath -Directory | %{Compress-Archive -Path $_.FullName -DestinationPath ($_.FullName + ".zip"); remove-item -Path $_.FullName -Recurse -Force } 
相關問題