如何使用.LastWriteTime和(Get-Date).Month将数据移动到新的Year / Month文件夹结构中

时间:2018-10-10 16:30:48

标签: powershell

我对Powershell还是比较陌生,并负责清理存档服务器。我正在尝试通过在Powershell中查看LastWriteTime来创建一个脚本,将文件移动到Year \ Month文件夹结构中。

我有以下内容,但是我不知道如何查看文件的编辑月份?

$Path = "D:\Data"
$NewPath = "D:\ArchiveData"
$Year = (Get-Date).Year
$Month = (Get-Date).Month

New-Item $NewPath\ -name $CurrentYear -ItemType Directory
New-Item $NewPath\$Year -Name $Month -ItemType Directory
Get-ChildItem -path $Path | Where-Object {$_.LastWriteTime -Contains (Get-Date).month} | Move-Item -Destination "$NewPath\$Year\$Month"

任何有关如何做到这一点的想法都会受到赞赏?

谢谢

2 个答案:

答案 0 :(得分:1)

-contains用于查看数组是否包含项;在这里不合适。

-eq是您所需要的。根据您的变量$Month,您将只需要关心的部分(即月份):

($_.LastWriteTime).Month -eq (Get-Date).month

答案 1 :(得分:1)

我想我将从另一端着手解决这个问题。可以在需要时创建目录。

当您对文件可以正确移动感到满意时,请从-WhatIf cmdlet中删除Move-Item

$Path = 'C:\src\t'
$NewPath = 'C:\src\tarch'

Get-ChildItem -File -Path $Path |
    ForEach-Object {
        $Year = $_.LastWriteTime.Year
        $Month = $_.LastWriteTime.Month
        $ArchDir = "$NewPath\$Year\$Month"

        if (-not (Test-Path -Path $ArchDir)) { New-Item -ItemType "directory" -Path $ArchDir | Out-Null }
        Move-Item -Path $_.FullName -Destination $ArchDir -WhatIf
    }