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

PowerShell:满足条件时如何增加计数器,powershell,Powershell,我的要求是遍历每个目录和子目录,在文件名的第三个破折号(-)后找到一个字符,如果是“a”,则递增计数器,并在进程结束时,将满足所需条件的文件总数写入主机。我该怎么做 这是我的剧本: $counter = 0 dir .\ -Recurse | % { if (($_.Name.Split("-")[3] -notmatch "[^C]")) { $counter++ write-Host $_.Name.Split("-")[3] $cou

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

这是我的剧本:

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

如果只想打印计数器一次,请将其移出
ForEach对象

$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' } |
  Measure-Object).Count
然而,我建议根本不走那条路。这段代码读起来不是很好,因为很少有理由以这种方式实现计数器(可能在代码高尔夫之外)

更简单的方法是使用管道获取与您的条件匹配的所有文件,然后获取它们的计数:

(Get-ChildItem -Recurse |
  Where-Object { $_.Name.Split('-')[0] -match 'A' }).Count
如果存在大量文件,并且内存消耗是一个问题,则可以使用管道将结果传输到
测量对象

$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' } |
  Measure-Object).Count

如果这对您不起作用,请描述如何以及您为纠正问题所做的努力。如果您收到任何错误消息,包括他们也将是有益的。我没有得到任何错误消息,但结果不是我所期望的。无论发生什么情况,计数器都会不断增加并打印。我想打印在的总数以及名称中包含A的文件总数。显示一个文件名示例并用该示例编辑您的问题。谢谢Joey。我一有机会就会实施。