文件名与正则表达式匹配但位于带通配符的文件夹中
Filenames matching regex but in folder with wildcard
这是以下问题的后续问题:
这段代码工作正常:
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
结尾的子文件夹)。
如果我添加通配符条件,我将得不到任何结果。没有限制,我得到了正确的结果。请问这样可以吗?
我的想法是去掉第一个输出中的第 3 行(这是我 copy/paste 的),同时尽量减少要查看的文件夹数量。
您可以 嵌套 两个 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
永远不会匹配任何目录 名称,如果没有 文件 匹配该模式,returns 无 。
一般来说,-Recurse
在概念上更清晰 而不是 将通配符模式直接附加到 -Path
参数,以便更好地表明模式将在子树中的 每个 目录中匹配。
在你的情况下,你会注意到你试图双重过滤,假设你也使用-Filter
参数。
这是以下问题的后续问题:
这段代码工作正常:
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
结尾的子文件夹)。
如果我添加通配符条件,我将得不到任何结果。没有限制,我得到了正确的结果。请问这样可以吗?
我的想法是去掉第一个输出中的第 3 行(这是我 copy/paste 的),同时尽量减少要查看的文件夹数量。
您可以 嵌套 两个 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
永远不会匹配任何目录 名称,如果没有 文件 匹配该模式,returns 无 。
一般来说,-Recurse
在概念上更清晰 而不是 将通配符模式直接附加到 -Path
参数,以便更好地表明模式将在子树中的 每个 目录中匹配。
在你的情况下,你会注意到你试图双重过滤,假设你也使用-Filter
参数。