Powershell脚本仅计算目录中的.txt文件

时间:2019-02-28 01:13:36

标签: powershell powershell-v3.0 cmdlets

我的目标是向某些用户发送电子邮件,以通知某些文件夹目录中文件的当前数量

我只需要计算扩展名为.txt的文件,而排除其中的文件夹和文件。

请参见下图

U:\ TESTING \ Main文件夹

Testing Main Folder Image

U:\ TESTING \ Main Folder \ Sub Folder 1

Testing Sub Folder 1 Image

U:\ TESTING \ Main Folder \ Sub Folder 2

Testing Sub Folder 2 Image

输出结果应该看起来像这样

Example output table

“主文件夹”行应仅为1,但其中还包括子文件夹1和2以及其中的txt文件。

这是计算总文件数的代码部分

$total = Get-ChildItem $path -Recurse -File -Include *.txt |Where-Object {$_.LastWriteTime} | Measure-Object | ForEach-Object{$_.Count}

当我在此行中删除-Recurse时,总列的结果变为 0

 $total = Get-ChildItem $path  -File -Include *.txt |Where-Object {$_.LastWriteTime} | Measure-Object | ForEach-Object{$_.Count}

1 个答案:

答案 0 :(得分:0)

我发现以下解决方法

  1. 使用-filter代替-include

只需删除-recurse以排除计数中的子目录文件 并使用-filter代替-include

$path = "D:\LIVE"

 $total = Get-ChildItem $path  -File -filter *.txt |Where-Object {$_.LastWriteTime} | Measure-Object | ForEach-Object{$_.Count}
  1. 使用get-Item代替带有-include的Get-ChildItem

-Filter仅限于使用一个参数,因此,如果要使用-include来使用尽可能多的搜索参数,请使用Get-Item代替get-childItem

只需添加*(在未声明路径的情况下)或*附加到现有路径上

$path = "D:\LIVE\*"

 $total = Get-Item $path -include *.txt, *.xml  |Where-Object {$_.LastWriteTime} | Measure-Object | ForEach-Object{$_.Count}