我正在尝试使用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文件,但总行数位于中间。
答案 0 :(得分:3)
假设总数只是用于显示,我想将其添加到哈希集中没有意义。 删除行
$CountHash.Add("Total", $Total)
并将其添加为最后一行:
Write-Host "Total: $Total"
答案 1 :(得分:1)
要回答您的问题,您可以使用添加方法as Kenned did或通过指定新密钥来创建新密钥:
$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
答案 2 :(得分: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
答案 3 :(得分:0)
我会这样做:
$CountHash += @{Total = $total}