PowerShell:满足条件时如何增加计数器

时间:2017-11-22 15:37:36

标签: powershell

我的要求是遍历每个目录和子目录,并在文件名中的第三个破折号( - )之后找到一个字符,如果它是“A”,则递增计数器并在过程结束时,写入主机满足所需条件的文件总数。我该怎么做?

这是我的剧本:

$counter = 0
dir .\ -Recurse | % {
    if (($_.Name.Split("-")[3] -notmatch "[^C]")) {
        $counter++
        write-Host $_.Name.Split("-")[3]
        $counter
    }
}

1 个答案:

答案 0 :(得分:1)

如果您只打印一次计数器,请将其移出ForEach-Object

$counter = 0
dir .\ -Recurse | %{
  if (($_.Name.Split("-")[3] -notmatch "[^C]")) {
    $counter++
    write-Host $_.Name.Split("-")[3]
  }
}
$counter

但是,我建议不要走那条路。这段代码读起来并不是很好,因为很少有理由以这种方式实现计数器(可能在代码打高尔夫球之外)。

更简单的方法是使用管道来获取符合您条件的所有文件,然后计算:

(Get-ChildItem -Recurse |
  Where-Object { $_.Name.Split('-')[0] -match 'A' }).Count

如果有很多文件并且内存消耗是个问题,您可以使用管道将结果传递给Measure-Object

(Get-ChildItem -Recurse |
  Where-Object { $_.Name.Split('-')[0] -match 'A' } |
  Measure-Object).Count