如何根据文件夹名称对文件夹中的文件进行排序

时间:2019-09-30 21:01:24

标签: powershell

您好,这是我第一次使用Powershell,我想根据文件名中的前4位对文件(示例名称:5035 facture coop.pdf)进行排序,然后将其移动到其他文件夹中(示例名称:5100 subvention) ,5150 dons,5200dépensescourantes等)

文件夹中包含的文件名称应小于或等于其名称中的数字,但要大于其下方的文件夹之一。

示例:5035个生产X.pdf将放在5100补助金文件夹中 但是5101 Facture y.pdf会放在5150 dons文件夹中

我试图在论坛和其他论坛的其他地方汇编一些代码,但是我失败了,很不幸

文件所在的文件夹

$TopFolder = "C:\Users\Administration\Desktop\scannes"

目标文件夹所在的文件夹

$destination = "C:\Users\Administration\Desktop\comptabilité essai"

获取文件

$Folders = gci $TopFolder -OutVariable Files | ? { $_.PSisContainer }

循环搜索所有扩展名为* .docx的文件

$Files | ? { $_.Extension -eq '.docx' } | % {

    # Split FileName to get the number
    $num = ($_.Name -split " ")[0]

    # Get FolderName and compare it to number
    $MoveTo = $destination | ? { $_.Name.substring(0,4) -ge $num }

    # If a folder was found, move file there. else print error
    if ($MoveTo)
    {
        Move-Item $_.FullName $MoveTo 
        Write-Host "Copied File $($_.Name) to $MoveTo"
    }
    else 
    { 
        Write-Host "Did not find folder $($num) in $TopFolder" 
    }
}

我不知道如何使规则小于或等于但大于其他文件夹,而且根本不起作用。

1 个答案:

答案 0 :(得分:1)

如果将$destination变量设置为,则以mjsqu的注释为基础。

$destination = Get-ChildItem -Path "C:\Users\Administration\Desktop\comptabilité essai" -Directory

并将您的$MoveTo = ...行修改为

$MoveTo = $destination | ? { $_.Name.substring(0,4) -ge $num } | Sort-Object -Property Name | Select-Object -First 1

这将使$MoveTo包含名称大于数字的第一个文件夹。

然后,您可能需要修改Move-Item $_.FullName $MoveTo行以说出Move-Item $_.FullName $MoveTo.FullName来获取目录名称。