匹配正则表达式的文件名,但在带通配符的文件夹中

时间:2018-11-26 20:25:09

标签: powershell string-formatting

这是跟进问题:PowerShell concatenate output of Get-ChildItem

此代码可以正常工作:

Get-ChildItem -Path "D:\Wim\TM1\TI processes" -Filter "*.vue" -Recurse -File |
    Where-Object { $_.BaseName -match '^[0-9]+$' } |
    ForEach-Object { ($_.FullName -split '\\')[-2,-1] -join '\' } |
    Out-File D:\wim.txt

但是我需要将搜索文件夹限制为仅某些文件夹,基本上是以下过滤器:D:\Wim\TM1\TI processes\\*}vues(因此所有以}vues结尾的子文件夹)。

如果我添加通配符条件,则不会获得任何结果。没有限制,我得到正确的结果。可以吗?

without filter

with filter

这个想法是要摆脱第一个输出中的第三行(这是我的复制/粘贴操作),并且还要减少要查看的文件夹数量。

1 个答案:

答案 0 :(得分:1)

您可以<嵌套>嵌套两个Get-ChildItem呼叫:

  • 外部Get-ChildItem -Directory -Recurse调用首先过滤感兴趣的目录

  • 内部Get-ChildItem -File调用,对于找到的每个目录,该调用均检查并处理感兴趣的文件

Get-ChildItem -Path "D:\Wim\TM1\TI processes" -Filter "*}vues" -Recurse -Directory |
  ForEach-Object {
    Get-ChildItem -LiteralPath $_.FullName -Filter "*.vue" -File | 
      Where-Object { $_.BaseName -match '^[0-9]+$' } | 
        ForEach-Object { ($_.FullName -split '\\')[-2,-1] -join '\' }                 
  } | Out-File D:\wim.txt

注意:假设所有感兴趣的*.vue文件都直接位于每个*}vues文件夹中的


关于您尝试过的事情

鉴于您将要枚举的项目限制为个文件-File),那么目录名通配符模式*}vues永远不会与任何目录< / em>名称,并且在没有与该模式匹配的文件的情况下,不返回

通常,对于-Recurse,将通配符模式直接附加到-Path参数上从概念上讲是更干净的 not ,以便更好地表示将在以下位置匹配该模式子树中的每个目录。

如果您使用-Filter参数,也可能会 过滤