您好,这是我第一次使用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 }
$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"
}
}
我不知道如何使规则小于或等于但大于其他文件夹,而且根本不起作用。
答案 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
来获取目录名称。