当特定文件类型存在于另一个目录中时,查找给定扩展名的所有文件

时间:2014-03-05 18:06:49

标签: vb.net powershell

描述

使用Powershell,我试图查找存在于任何文件夹中的.vb文件列表,但前提是该目录中的bin文件夹包含任何.compiled文件。我将在1个目录中运行它,该目录将包含许多文件夹。我遇到的麻烦是bin文件夹并不总是在文件夹结构中的相同深度。我已经用下面的sudo代码和示例概述了这一点。请务必在帖子的最后看到最终结果。谢谢!

Sudo Code

{p> 如果<{1}} 中存在任何'*.compiled'文件

然后d:/inetpub/[Unspecified_Number_of_directories]/x/bin中递归查找所有文件,其扩展名为d:/inetpub/[Unspecified_Number_of_directories]/x

实施例

执行目录:'*.vb'

示例1:

d:/inetpub

应该结果:

d:/inetpub/123/abc
/bin/
-code.dll
-morecode.dll
-lesscode.compiled
/folder1/
-compiledPage.aspx
-regularPage.aspx
-regularPage.aspx.vb
-anotherPage.aspx
-anotherPage.aspx.vb
/folder2/
-auth.vb

示例2:

d:/inetpub/123/abc/folder1/regularPage.aspx.vb
d:/inetpub/123/abc/folder1/anotherPage.aspx.vb
d:/inetpub/123/abc/folder2/auth.vb

应该结果:

d:/inetpub/123/xyz
/bin/
-code.dll
-morecode.dll
-lesscode.dll
/folder1/
-compiledPage.aspx
-regularPage.aspx
-regularPage.aspx.vb
-anotherPage.aspx
-anotherPage.aspx.vb
/folder2/
-auth.vb

示例3:

Nothing
应该得到

d:/inetpub/456
/bin/
-less.compiled
/folder1/
-test.aspx
-test.aspx.vb
/folder2/
-auth.vb

最后

重要的是要注意它应该在一次运行中经历所有这些示例。我不会为每个文件夹运行此脚本,而是根文件夹d:/inetpub/456/folder1/test.aspx.vb d:/inetpub/456/folder2/auth.vb 。因此,只有一个结果列表如下所示:

'd:/inetpub'

2 个答案:

答案 0 :(得分:1)

我认为这应该适合你:

$Compiled = Get-ChildItem -Path d:\inetpub\*\x\bin -Include *.compiled -Recurse;
if ($Compiled) {
    Get-ChildItem -Path d:\inetpub\*\x -Include *.vb -Recurse;
}

答案 1 :(得分:1)

我想我的路线与特雷弗略有不同。查询* .compiled文件,当它为每个* .compiled文件找到一个以递归方式搜索对象目录的* .vb文件时。

GCI D:\inetpub -include *.compiled -recurse|%{GCI "$($_.directory)\.." -include *.vb -recurse|Select FullName}

如果这会导致您重复文件(如果您在一个文件夹中有多个.compiled文件,则会发生这种情况),您可以在此结束时抛出|Select -Unique来解决该问题。但它会降低速度,所以除非需要,否则我不会这样做。

我尝试编辑脚本,只包含位于名为'bin'的文件夹中的.compiled文件,但失败了。抱歉。我确实在其中添加了|Select FullName,以提供更像您所要求的列表而不是文件系统对象。现在它只列出你想要的完整路径和文件名。