2015-12-04 64 views
4

我想制作一个PowerShell脚本,它将计算目录&子目录中的所有.xml文件并列出值+路径。Powershell脚本来计算目录和子目录中的特定文件

到目前为止,我已经做了这一点:

Get-ChildItem -Path c:/test -recurse -include *.xml 

这是接近我想要的东西,但没有实际的文件名,只是在文件夹路径和计数。

这就是我得到:

>  Directory: C:\test\A_Sub-folder 
> Mode    LastWriteTime  Length Name 
> ----    -------------  ------ ---- 
> -a---  27/11/2015  11:29   0 AA.xml 
> 
>  Directory: C:\test 
> Mode    LastWriteTime  Length Name 
> ----    -------------  ------ ---- 
> -a---  27/11/2015  11:29   0 BB.xml 
> -a---  27/11/2015  11:29   0 CC.xml 
> -a---  27/11/2015  11:29   0 DD.xml 

而我试图让这个(或类似):

> Directory: C:\test\A_Sub-folder 
> 1 
> Directory: C:\test 
> 3 

的计划是运行的每个根驱动器上运行此脚本(某些驱动器有大约5K .xml文件,所以我不知道这将如何影响性能)

编辑:

这适用于子文件夹,但由于某些原因,它无法在根目录下运行(例如。 E:/)。 我想排除\ windows和\ program文件,但它不起作用。有什么方法可以排除搜索中的根目录吗?

脚本至今:

$excludedPaths = @("E:\Windows", "E\Program Files", "E:\Program Files (x86)", "E:\MSSQL", "E:\MSSQL11.MSSQLSERVER"); 
$pathtocount = Read-Host -Prompt 'Input path to count xml files' 
Get-ChildItem -Path $pathtocount -recurse -include *.xml | Where-Object { $excludedPaths -notcontains $_.Directory } | Group-Object -Property Directory | Sort-Object count 

回答

6
Get-ChildItem -Path c:/test -recurse -filter *.xml | Group-Object -Property Directory 

并得到一个更好的表,你可以添加到-NoElementGroup-Object

要排除某些目录,尝试:

$excludedPaths = @("Windows", "Program Files", "Program Files (x86)"); 
$searchPaths = Get-ChildItem -Path C:\ -Directory | Where-Object { $excludedPaths -notcontains $_.name } 
Get-ChildItem -Path $searchPaths -recurse -filter *.xml | Group-Object -Property Directory 

更新: 根据Get-ChildItem documentation-filter-include更有效率时,你只筛选一个模式。 (如果您筛选更多的模式,-filter不工作,你必须使用-include

为了排除整个子树:

  • -exclude不起作用,因为它是适用于每一个文件,它不修剪整个树,而且它似乎过滤器只匹配文件名,而不是目录
  • 您的Where-Object不起作用,因为$_.Directory什么也没有返回(不知道为什么,我还没有找到任何文档)
  • 即使看另一个物业($_.FullName似乎做你打算),这只会删除目录本身,而不是目录开始的路径。您需要对过滤器集中的每个字符串执行字符串前缀匹配(使用-imatch或-ilike)
+0

您的问题比我的要好。 :) – Nate

+0

@Nate不要气馁,你在回答中做出了很好的努力,但它不完全正确。继续尝试,很高兴看到新的人张贴答案! :)另外,您可以通过解决其他人的问题来学习多少。有时它会带来对问题的全新观点,并有助于解决您自己遇到的问题。 – TheMadTechnician

+0

太棒了!正是我想要的!欢呼家伙:) – daelas

相关问题