Powershell,如何将文件名与存储在文本文件中的部分名称进行匹配

时间:2017-06-05 14:29:19

标签: arrays string file powershell

很抱歉转储问题,因为我是PowerShell的初学者。我们有很多文件进入一个目录,它们总是在该目录中增加和减少,因为在我们使用它们之后它被移动到另一个目录。

我们在txt文件中有一个优先级文件列表,该文件只有文件名的部分名称。

例如,对于文件名:

  

2017年6月5日--- 666-12-05-01.txt

在优先级列表中,我的部分名称为---666---

如何使用Powershell检查文件夹中的文件是否已在优先级列表中?

我编写了以下脚本,因为我只需要比给定时间更早的文件。但它没有用。

Get-ChildItem -path $Struct.Path  -filter $Struct.filter |
Where-Object {$_.CreationTime -lt $time} |
Where-Object {$_.Name -contains "*$PriorityList*"} |
ForEach-Object { $counterP++}

2 个答案:

答案 0 :(得分:0)

首先,示例中的文件名与部分名称不匹配。因此,我们假设模式为"666"。如果您有多种模式,可以将它们连接到一个过滤器中:

$PriorityList = "---666---","---555---"
$PriorityFilter = $PriorityList -join '|'

然后使用此过滤器检查Name属性:

Get-ChildItem -path $Struct.Path  -filter $Struct.filter |
Where-Object {$_.CreationTime -lt $time} |
Where-Object {$_.Name -match $PriorityFilter |
ForEach-Object { $counterP++}

-contains运算符使用集合作为左操作数,不接受通配符进行匹配。

答案 1 :(得分:0)

我已更新您的代码,现在它正常运行

Get-ChildItem -path $Struct.Path  -filter $Struct.filter |
Where-Object {$_.CreationTime -lt $time} | ForEach-Object { If($_.name -
Match $Priorfilter) { $counterP++  }