如何使用源文件夹层次结构维护项目以及将CreationTime作为标准?

时间:2019-04-16 08:50:27

标签: powershell

我正在将PDF文件复制到目标文件夹。我需要保持与源文件夹相同的文件夹结构。

我设法复制并维护了文件夹结构,但是由于某种原因,它没有根据我的创建时间条件进行选择。

$archive_MonthlyStatement = "D:\Archives\Monthly_Statement"
$path2 = "D:\Temp\Test_Output\"

$scan_monthStatement = Get-ChildItem $archive_MonthlyStatement | Where-Object {
    (( $_.PSIsContainer ))
} | Where {
    $_.CreationTime -lt (Get-Date).AddDays(-730)
} | Copy-Item -Destination "$path2" -Recurse -Container

预期结果:
源文件夹:

Archives\Reports\Branch1\2015\pdf files
Archives\Reports\Branch1\2016\pdf files
Archives\Reports\Branch1\2017\pdf files
Archives\Reports\Branch1\2018\pdf files
Archives\Reports\Branch1\2019\pdf files

目标文件夹:

Archives\Reports\Branch1\2015\pdf files
Archives\Reports\Branch1\2016\pdf files
Archives\Reports\Branch1\2017\pdf files

实际结果:
目标文件夹:

Archives\Reports\Branch1\2015\pdf files
Archives\Reports\Branch1\2016\pdf files
Archives\Reports\Branch1\2017\pdf files
Archives\Reports\Branch1\2018\pdf files
Archives\Reports\Branch1\2019\pdf files

只要父目录创建时间超过730天,它就会以某种方式进行复制。

1 个答案:

答案 0 :(得分:0)

检查每个文件的创建时间并复制。

$srcDir = "D:\Archives\Monthly_Statement"
$destDir = "D:\Temp\Test_Output"

Get-ChildItem $srcDir -Filter *.pdf -Recurse |
Where-Object CreationTime -lt (Get-Date).AddDays(-730) |
ForEach-Object {
    $destFile = [IO.FileInfo]::new($_.FullName.Replace($srcDir, $destDir))
    if($destFile.Exists) { return }
    if(!$destFile.Directory.Exists) { $destFile.Directory.Create() }
    $_.CopyTo($destFile)
}