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

合計が単なる表示用であると仮定すると、それをハッシュ セットに追加しても意味がないと思います。線を取り除く

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

そして、これを最後の行として追加します。

Write-Host "Total: $Total"
于 2012-08-08T10:20:45.683 に答える
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

私は次のようにします:

$CountHash += @{Total = $total}
于 2012-08-08T14:12:58.073 に答える
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 に答える