当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣:文件的大小

作者:精品下载站 日期:2024-12-14 07:41:23 浏览:13 分类:玩电脑

周五乐趣:文件的大小


[玩转系统] 周五乐趣:文件的大小

Measure-Object cmdlet 还可用于测量文本文件。您可以获得单词总数、字符数和行数等值。您所需要做的就是将内容通过管道传输到 cmdlet。

PS C:\> get-content C:\scripts\Measure-ScriptLines.ps1 | measure-object -Line -Word -Character

                   Lines                    Words               Characters Property
                   -----                    -----               ---------- --------
                      14                       41                      429

因此,为了进行测量,假设我今年创建的所有脚本文件都可以运行如下命令:

PS C:\> dir c:\scripts\*.ps1 | where { $_.CreationTime -ge [datetime]"1/1/2014"} | get-content | measure -Line -IgnoreWhiteSpace

Lines Words                    Characters              Property           ----- -----                    ----------              --------           2860

我添加了跳过空白行的参数。但我想要更多信息,例如文件总数,也许还有平均值,所以我想出了这段代码。


dir c:\scripts\*.ps1 -recurse -ov a | 
get-content | 
measure -Line -IgnoreWhiteSpace | 
Select Lines,
@{Name="TotalFiles";Expression={$a.count}},
@{Name="Avg";Expression={$_.lines/$a.count}}

当您将 Measure-Object 与文本参数一起使用时,您不会像通常那样获得计数属性。因此,我将常用参数之一 OutVariable(其别名为 OV)与 Get-Childitem(dir 命令)结合使用。使用 Out-Variable 时,结果将写入管道和变量。这意味着我可以稍后在表达式中使用此变量来为 TotalFiles 和 Average 创建自定义属性。


Lines                       TotalFiles                             Avg
-----                       ----------                             ---
143375                             2003                71.5801298052921

假设我希望今年创建的所有文件都有相同的结果。我需要稍后在表达式中移动捕获变量:


dir c:\scripts\*.ps1 | where { $_.CreationTime -ge [datetime]"1/1/2014"} -ov a | 
get-content | 
measure -Line -IgnoreWhiteSpace | 
Select Lines,
@{Name="TotalFiles";Expression={$a.count}},
@{Name="Avg";Expression={$_.lines/$a.count}}

我需要确保我的计数和平均值基于过滤结果。

 Lines                       TotalFiles                              Avg
 -----                       ----------                              ---
  2860                               24                 119.166666666667

或者我也可以包含未过滤的结果。


PS C:\> dir c:\scripts\*.ps1 -Recurse -ov All | where { $_.CreationTime -ge [datetime]"1/1/2014"} -ov Filtered | 
get-content | 
measure -Line -IgnoreWhiteSpace | 
Select Lines,
@{Name="TotalAllFiles";Expression={$All.count}},
@{Name="TotalFiltered";Expression={$Filtered.count}},
@{Name="PctTotal";Expression={($filtered.count/$All.count)*100}},
@{Name="Avg";Expression={$_.lines/$Filtered.count}}


Lines         : 2860
TotalAllFiles : 2003
TotalFiltered : 24
PctTotal      : 1.19820269595607
Avg           : 119.166666666667

我已将 OutVariable 添加到表达式的第一部分。我还继续使用了更有意义的变量名称。既然我有了数据,我决定添加更多数据。最后,尽管我主要使用变量的计数值,但它们保存完整的对象,这会导致一些有趣的可能性:

PS C:\> dir c:\scripts\*.ps1 -Recurse -ov All | where { $_.CreationTime -ge [datetime]"1/1/2014"} -ov Filtered | 
get-content | 
measure -Line -IgnoreWhiteSpace | 
Select Lines,
@{Name="TotalAllFiles";Expression={$All.count}},
@{Name="TotalAllKB";Expression={ ($all | Measure-Object -Property length -sum).sum/1KB }},
@{Name="TotalFiltered";Expression={$Filtered.count}},
@{Name="TotalFilteredKB";Expression={ ($Filtered | Measure-Object -Property length -sum).sum/1KB }},
@{Name="PctTotal";Expression={($filtered.count/$All.count)*100}},
@{Name="AvgLines";Expression={$_.lines/$Filtered.count}}


Lines           : 2860
TotalAllFiles   : 2003
TotalAllKB      : 6865.7890625
TotalFiltered   : 24
TotalFilteredKB : 496.4453125
PctTotal        : 1.19820269595607
AvgLines        : 119.166666666667

所以今天的乐趣实际上涵盖了两个主题,将 Measure-Object 与文本文件一起使用以及 OutVariable 公共参数。享受!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯