复制和归档目录,仅包含x天

时间:2016-10-22 18:30:42

标签: powershell powershell-v4.0

我已经搜索过了,我已经尝试过了。我知道我不是很擅长使用p​​owershell,但我开始认为这是不可能的。

我要做的是移动X天以前的C:\ Data的所有内容并将其存档。

听起来很简单..但是如果 C:\ data \ Subject包含从2015年到Current的文件。我只想归档X天以前的文件。所以新的归档路径将是C:\ DataBackup,并且在那里它将包含C:\ data的所有文件夹,但它们中的唯一文件将是X天旧..

这就是我用来复制和存档文件夹/文件的内容但它没有考虑到年龄..如果它确实如此,我会删除它从C:数据移动的文件,因为它们现在已经备份在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 个答案:

答案 0 :(得分: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
}

我添加了一个名为$tempPath的文件夹,其中包含将由CreateFromDirectory添加到存档中的文件。超过某个定义限制$limit的文件首先被复制到临时文件夹$tempPath,然后以CreateFromDirectory为参数执行$tempPath

最后删除$tempPath,因为不再需要它。

请注意,在对任何重要文件运行此操作之前,请执行一些简单的测试。在脚本的最后,它将删除它之前存档的文件。

在我自己的测试中,它似乎正在工作,但我建议您也验证这一点。

答案 1 :(得分:1)

如果您使用PowerShell v5.0或更高版本,请尝试以下操作:

[
 {"date":"2010-03-01","USDCAD": 1.31},
 {"date":"2010-03-02","USDCAD": 1.32},  
 {"date":"2010-03-03","USDCAD": 1.33}, 
]