这是跟进问题: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
结尾的子文件夹)。
如果我添加通配符条件,则不会获得任何结果。没有限制,我得到正确的结果。可以吗?
这个想法是要摆脱第一个输出中的第三行(这是我的复制/粘贴操作),并且还要减少要查看的文件夹数量。
答案 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
参数,也可能会 过滤。