PowerShell过滤器,Where-Object,Get-ChildItem

时间:2018-10-15 20:23:42

标签: powershell

我目前拥有在PowerShell中运行的以下脚本。我想获取PS脚本所在目录中的文件列表,我希望lastmodifieddate在30多天前的所有文件,然后将其移动。我不确定自己在做什么错。

 param (
    [Parameter(Mandatory=$true)][string]$destinationRoot
 )

$path = (Get-Item -Path ".\").FullName

Get-ChildItem $path\*  -Include *.xlsx| 
Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} 
Foreach-Object {
    $content = $path + "\" + $_.Name

    $year = (Get-Item $content).LastWriteTime.year.ToString()
    $monthNumber = (Get-Item $content).LastWriteTime.month
    $month = (Get-Culture).DateTimeFormat.GetMonthName($monthNumber)

    $destination = $destinationRoot + "\" + $year + "\" + $month 

    New-Item -ItemType Directory -Force -Path $destination

    Move-Item -Path $content -Destination $destination -force

}

1 个答案:

答案 0 :(得分:0)

  1. 我使用-f作为格式字符串
  2. 不需要使用$path
  3. 使用-File排除目录,使用-Filter进行过滤器扩展

您可以这样修改代码:

param (
    [Parameter(Mandatory=$true)][string]$destinationRoot
)

Get-ChildItem -File -Filter "*.xlsx"  | Where LastWriteTime -lt (Get-Date).AddDays(-10) | %{
        $destination= "{0}\{1:yyyy\\MMMM}" -f $destinationRoot, $_.LastWriteTime
        New-Item -ItemType Directory -Force -Path $destination
        Move-Item $_.FullName -Destination $destination -Force
    }