我是PowerShell的新手,我有很多文件可以按月与PowerShell一起存档。每个文件在文件名中都有一个YYYYMM日期戳。我想移动日期戳超过24个月的文件。
示例: file1_201903.txt file2_201902.txt ... file3_201703.txt(这应该存档) file4_201702.txt(这应该存档)
请注意,源文件驻留在具有多个子文件夹的目录中。我想要脚本来检查所有子文件夹。不需要在目标中复制文件夹。
这是我到目前为止所尝试的内容。
$SourceDir = 'C:\source'
$DestDir = 'C:\destination'
$YearsAgo = 2
$Then = ( Get-Date ).AddYears( -$YearsAgo ).Date
Get-ChildItem -Path $SourceDir |
Where-Object {
$DatePart = ( $_.BaseName -split '_' )[1]
$FileDate = [datetime]::ParseExact( $DatePart, 'yyyyMMdd', [cultureinfo]::CurrentCulture )
$FileDate -lt $Then
} |
Move-Item -Destination $DestDir
发布于 2019-03-21 09:50:51
实际上看起来并不那么糟糕。;-)但-FilterScript
的Where-Object
需要稍微调整一下:
$SourceDir = 'C:\source'
$DestDir = 'C:\destination'
$YearsAgo = -2
$Then = ( Get-Date ).AddYears( $YearsAgo ).Date
Get-ChildItem -Path $SourceDir -Recurse |
Where-Object {
[datetime]::ParseExact( $(( $_.BaseName -split '_' )[1]), 'yyyyMMdd', [cultureinfo]::CurrentCulture ) -lt $Then
} |
Move-Item -Destination $DestDir
您可以使用更具描述性的方式Foreach-Object
。有时这更容易阅读/理解/遵循:
Get-ChildItem -Path $SourceDir -Recurse |
ForEach-Object{
$DatePart = ( $_.BaseName -split '_' )[1]
$FileDate = [datetime]::ParseExact( $DatePart, 'yyyyMMdd', [cultureinfo]::CurrentCulture )
if ($FileDate -lt $Then) {
Move-Item -Path $_.FullName -Destination $DestDir
}
}
但我现在无法测试==
https://stackoverflow.com/questions/-100008981
复制相似问题