列出所有不包含通配符匹配文件的目录

Tom*_*tta 4 filesystems powershell directory-structure wildcard

我需要能够列出根文件夹中不包含包含字符串的文件的所有目录merged。因此,例如,如果我从目录运行脚本C:\out,我将获得C:\out其中与通配符不匹配的所有文件夹的列表merged

例子:

树:

-c:\out
--c:\out\test123
---sample.meta
---sample_merged.meta
--c:\out\test456
---sample.meta
---sample_merged.meta
--c:\out\test789
---sample.meta
--c:\out\test013
---sample.meta
Run Code Online (Sandbox Code Playgroud)

输出:

test789
test013
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以使用Get-ChildItemWhere-Object以及Select-String

Get-ChildItem -Directory |
Where-Object { -not (Get-ChildItem $_ -File -Recurse -Filter *merged*) } |
Select-Object Name, LastWriteTime
Run Code Online (Sandbox Code Playgroud)

下面是对每行的作用的解释:

  1. 获取当前目录下的所有目录。

  2. 设置一个过滤器,在每个目录中递归搜索包含字符串的文件名merged。如果没有找到,只传递目录。

  3. 获取每个目录的NameLastWriteTime属性。

另请注意,如果需要,您可以更简洁地编写它:

gci -dir | ? { !(gci $_ -file -recur -filter *merged*) } | select name, *w*time
Run Code Online (Sandbox Code Playgroud)