You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell的循环中使用两个条件筛选目标目录?

PowerShell多规则前缀筛选目录实现方法

你原有代码无法生效的核心原因有3个:

  • 运算符误用:PowerShell中-Contains是集合元素判断运算符,用来检查单个值是否存在于数组/列表类集合中,不支持字符串前缀/内容匹配。字符串前缀匹配需要用-StartsWith()方法,或者-Like运算符配合通配符。
  • 语法错误:Where-Object的脚本块只需要返回布尔类型的判断结果,不需要嵌套if语句,且你写的if {判断条件}本身语法不符合PowerShell规则(if后接判断条件需要用圆括号包裹)。
  • 参数限制:Get-ChildItem的-Filter参数单次仅支持传入1个匹配规则,无法直接同时匹配两类前缀。

推荐实现方案

所有方案默认添加-Directory参数,仅筛选子目录、避免误匹配同名普通文件,如果需要同时选中同前缀文件删掉该参数即可。

方案1:前缀精确匹配(性能最优)

直接调用字符串的StartsWith方法做前缀判断,逻辑最明确、执行效率最高:

foreach ($f in Get-ChildItem -Directory | Where-Object { $_.Name.StartsWith("abc") -or $_.Name.StartsWith("alphabet") }) {
    # 在此处编写需要对目标目录执行的操作,通过$f引用当前目录对象
    # 示例:输出当前处理的目录全路径
    Write-Host "处理目录:$($f.FullName)"
}

方案2:通配符匹配写法

如果你更习惯用通配符规则,使用-Like运算符搭配*通配符即可实现和上述代码完全一致的效果:

foreach ($f in Get-ChildItem -Directory | Where-Object { $_.Name -Like "abc*" -or $_.Name -Like "alphabet*" }) {
    # 你的业务逻辑
}

方案3:直接用-Include传入多筛选规则

Get-ChildItem的-Include参数支持传入数组格式的多个匹配规则,注意非递归场景下需要给-Path参数值末尾加*才能让筛选规则生效:

foreach ($f in Get-ChildItem -Path .\* -Directory -Include "abc*", "alphabet*") {
    # 你的业务逻辑
}

注意:如果需要做不区分大小写的匹配,可以把上述运算符/方法换成大小写不敏感的版本:比如-iStartsWith、-iLike,PowerShell默认的匹配行为本来就是大小写不敏感,绝大多数场景不需要额外调整。

内容的提问来源于stack exchange,提问作者mandypea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:36:24