使用Powershell,我试图查找存在于任何文件夹中的.vb文件列表,但前提是该目录中的bin文件夹包含任何.compiled文件。我将在1个目录中运行它,该目录将包含许多文件夹。我遇到的麻烦是bin文件夹并不总是在文件夹结构中的相同深度。我已经用下面的sudo代码和示例概述了这一点。请务必在帖子的最后看到最终结果。谢谢!
'*.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'
答案 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
,以提供更像您所要求的列表而不是文件系统对象。现在它只列出你想要的完整路径和文件名。