我的要求是遍历每个目录和子目录,并在文件名中的第三个破折号( - )之后找到一个字符,如果它是“A”,则递增计数器并在过程结束时,写入主机满足所需条件的文件总数。我该怎么做?
这是我的剧本:
$counter = 0
dir .\ -Recurse | % {
if (($_.Name.Split("-")[3] -notmatch "[^C]")) {
$counter++
write-Host $_.Name.Split("-")[3]
$counter
}
}
答案 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