如何查找所有具有名为“ Intro”且文件类型为* .mp4的文件夹

时间:2018-07-26 10:37:27

标签: powershell

距离我最近的是使用powershell Get-ChildItem given multiple -Filters

2 Spring WebApplicationInitializers detected on classpath

我认为,具有多个参数的Get-ChildItem -Include "Intro", "*.mp4" -Recurse -Include运算符。它提供带有“ Intro”文件夹或“ * .mp4”文件的文件夹。

但是我需要OR条件。文件夹必须包含一个名为“ Intro”和“ * .mp4”文件的文件夹。

我需要结构如下的文件夹-

AND

更新1

我正在搜索符合两个条件的文件夹。

  1. 它必须具有一个名为E:. └───test1.mp4 └───test2.mp4 └───test3.mp4 └───test4.mp4 └───test5.mp4 └───test6.mp4 └───Intro 并且

  2. 的子文件夹。
  3. 它必须具有Intro个文件。

答案大概如下。

*.mp4

2 个答案:

答案 0 :(得分:3)

您是否需要命令仅返回文件对象,还是还需要文件夹对象? 如果只是文件,我会这样:

Get-ChildItem -include "*.mp4" -Recurse -File | Where-Object {$_.Directory.Name -match 'Intro'}

因此,我们使用include来查找mp4文件并减少通过管道传输的对象数量。 然后,将其通过管道传递到Where-Object并查找具有文件夹名称的属性,并说我们希望它包含单词“ intro”。如果该文件夹需要确切地称为Intro,而不仅仅是包含该文件夹,则可以将-match更改为-eq

修改
要获取目录,我们可以这样:

(Get-ChildItem -include "*.mp4" -Recurse | Where-Object {$_.Directory.Name -match 'Intro'}).DirectoryName | Select-Object -Unique

现在,我们说找到的所有文件都符合搜索条件,我们希望查看这些文件的完整目录路径。

每个目录只能获得一个匹配项,因此,如果我们有一个目录与多个mp4文件匹配,并且我们不想在每个文件中一次看到同一目录,则可以将结果通过管道传递到{ {1}}只能看到每个目录一次。

编辑2
经过OP的澄清。
要找到一个同时包含mp4文件和一个名为intro的子文件夹的文件夹,我认为我们无法以任何已知的方式只能通过Get-ChildItem命令来做到这一点,因此我们可以像这样遍历每个文件夹:

Select-Object -Unique

我们通过管道传输到$Files = (Get-ChildItem -include "*.mp4" -Recurse -File).DirectoryName | Select-Object -Unique foreach($File in $Files) { Get-ChildItem -Path $File.DirectoryName -Recurse -Include 'Intro' -Directory } ,以确保具有多个mp4文件的文件夹不会多次循环播放,从而使我们多次输出具有相同介绍文件夹的文件。

答案 1 :(得分:3)

只想添加另一种方法(单行)即可获取包含mp4 files和文件夹Intro的文件夹(多数情况下,该文件夹可能为@HenrikStanleyMortensen):

(Get-ChildItem -include "*.mp4" -Recurse -File).DirectoryName | Select-Object -Unique | Where-Object {(Get-ChildItem $_ -Recurse -Include 'Intro' -Directory)}