2012-08-08 68 views
0

我想使用powershell脚本来计算代码计数。如何在哈希表的末尾添加键/值对?

我在网络中发现了一个脚本,并试图在最后添加总行。

我已经添加了列

$ CountHash.Add( “合计”,$总计)

末。

Param([string]$path, 
    [string]$outputFile, 
    [string]$include = "*.*", 
    [string]$exclude = "") 

Clear-Host 

$Files=Get-ChildItem -re -in $include -ex $exclude $path 
[email protected]{} 
$Total=0 
Foreach ($File in $Files) { 
    #Write-Host "Counting $File.FullName" 
    $fileStats = Get-Content $File.FullName | Measure-Object -line 
    $linesInFile = $fileStats.Lines 
    $CountHash.Add($File.FullName,$linesInFile) 

    $Total += $linesInFile 
} 

$CountHash.Add("Total",$Total) 
$CountHash 

但是,当我显示$ CountHash,它显示在中间的“总计”键。通过在最后添加Add不能确保它在最后添加。

如何在哈希表的末尾添加键/值对?

更新:我将这个哈希表导出为csv文件,但总行数在中间。

回答

3

假设总数只是用于显示,我想没有必要将它添加到哈希集。 删除行

$CountHash.Add("Total",$Total) 

,并添加为最后一行

Write-Host "Total: $Total" 
+0

我已更新我的问题。对不起,我不只是显示它 – Samselvaprabu 2012-08-08 10:24:57

1

要回答你的问题,你可以通过使用Add方法,如@Kenned做,或创建一个新的键指定它:

$CountHash.Total = $Total 

但是,我会采取一个更简单的方法,自定义对象,而不是哈希表。

Get-ChildItem -Path $path -Include $include -Exclude $exclude -Recurse | 
Select-Object FullName, @{Name='LineCount';Expression={ (Get-Content $_.FullName | Measure-Object -Line).Lines}} | 
Export-Csv .\files.csv 
0

我会做这样的:

$ CountHash + = @ {总= $总}

1

哈希表不维护他们的价值观的顺序。如果您想要订购类似的数据结构,请尝试使用System.Collection.Specialized.OrderedDictionary。你的例子会看起来像这样

$Files=Get-ChildItem -re -in $include -ex $exclude $path 
$CountHash= New-Object System.Collections.Specialized.OrderedDictionary # CHANGED 
$Total=0 
Foreach ($File in $Files) { 
    #Write-Host "Counting $File.FullName" 
    $fileStats = Get-Content $File.FullName | Measure-Object -line 
    $linesInFile = $fileStats.Lines 
    $CountHash.Add($File.FullName,$linesInFile) 

    $Total += $linesInFile 
} 

$CountHash.Add("Total",$Total) 
$CountHash 
相关问题