我有一个包含50个子文件夹的文件夹,这些子文件夹中有各种不同的文本文件。我可以运行什么PowerShell脚本来计算这些文件中的字符?
答案 0 :(得分:2)
$results= @{}
Get-ChildItem -Path C:\Temp -Filter *.txt -Recurse | ForEach-Object{
$count = Get-Content $_.FullName | Measure-Object -Character
$results.Add($_.FullName, $count.Characters)}
$results
输出:
Name Value
---- -----
C:\Temp\EventCombMT.txt 3724
C:\Temp\features.txt 222
C:\Temp\2test.txt 12
C:\Temp\winpe\realtekLan\no... 147
名称:txt文件的完整路径。
价值:字数。我确定它存在,但我找不到它如何计算字符的信息。如果你需要空格来计算,那就有一个开关-IgnoreWhiteSpace:$true
将把所有txt文件放在" c:temp"的目录和子目录中。每个文件的内容都通过管道输入Measure-Object来计算字符数。文件的全名及其字符数将放入哈希表中。在那种形式下,你可以进一步操纵它。当然还有其他一些你可以做的事情。这只是我的看法。
有关哈希的更多信息:http://technet.microsoft.com/en-us/library/ee692803.aspx
Measure-Object http://blogs.technet.com/b/heyscriptingguy/archive/2011/10/09/use-a-powershell-cmdlet-to-count-files-words-and-lines.aspx
答案 1 :(得分:0)
以下是否符合您的要求:
wc -l */*
这是一个UNIX命令。
答案 2 :(得分:0)
cmdlet Get-Content输出字符串对象。 字符串对象的属性“Length”对应于字符串中的字符数: http://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx
因此,您可以为每个文件构建一个名为“Number of Characters”的计算属性,如下所示:
Get-ChildItem -Path C:\Test\*.txt -Recurse |
Select-Object -Property Name, @{N="Number of Characters";E={ (get-content $_).length } }
Output :
Name Number of Characters
---- --------------------
New Text Document (2).txt 15
New Text Document (3).txt 852
New Text Document.txt 629
如果您想要文件夹中所有.txt文件的字符总数,请将上述命令存储到变量(例如$ TextFiles)中并使用Measure-Object:
$TextFiles | Measure-Object -Property "Number of Characters" -Sum
输出:
Count : 3
Average :
Sum : 1496
Maximum :
Minimum :
Property : Number of Characters
答案 3 :(得分:0)
运行V4,我通过以下方式运行了大约四分之一的旧邮件日志:
Get-ChildItem C:\maillogs\*3.s |
foreach {
&{
$ofs = ''
$Count=0
Get-Content $_ -ReadCount 1000 |
foreach { $count += ([string]$_).length }
[PSCustomObject]@{Name = $_.Name ; Count = $Count}
}
} | Format-Table -AutoSize
Name Count
---- -----
mail.@20140601T164553.s 98479479
mail.@20140602T163433.s 88578000
mail.@20140605T203213.s 754640
mail.@20140608T163523.s 61444158
mail.@20140613T163603.s 31823480
mail.@20140616T203253.s 633925
在大约22秒内。