1

我正在尝试使用 PowerShell 脚本计算代码计数。

我在互联网上找到了一个脚本,并试图在最后添加总行。

我已经添加了专栏

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

在最后。

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

Clear-Host

$Files = Get-ChildItem -re -in $include -ex $exclude $path
$CountHash = @{}
$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 时,它会在中间显示“Total”键。通过在末尾添加 Add 并不能确保它在末尾添加。

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

我将此哈希表导出为 CSV 文件,但总行数在中间。

4

4 回答 4

3

Assuming the total is just for display, I guess there's no point in adding it to the hash set. Remove the line

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

And add this as the last line:

Write-Host "Total: $Total"
于 2012-08-08T10:20:45.683 回答
1

我会这样做:

$CountHash += @{Total = $total}
于 2012-08-08T14:12:58.073 回答
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
于 2012-08-08T15:21:39.420 回答
1

要回答您的问题,您可以像 Kenned 那样使用 Add 方法,或者通过指定它来创建一个新键:

$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
于 2012-08-08T11:14:36.163 回答