2017-03-16 6 views
1

私のディレクトリ内のすべてのファイルの行数を取得しようとしています。私は0に設定し、すべてのファイルとその行番号を取得するループを何らかの種類の変数を使用してみました。ディレクトリ内のすべてのファイル行数の合計を取得しようとしています

> $i=0;ls | foreach{$i += [int](get-content $_ | measure-object -line)};$i 

しかし、私は0に設定し、それを変数に追加してみてくださいたびに、それは奇妙なエラーが出て撃つ:

Cannot convert the "Microsoft.PowerShell.Commands.TextMeasureInfo" value of type 
"Microsoft.PowerShell.Commands.TextMeasureInfo" to type "System.Int32". 
At line:1 char:19 
+ $i=0;ls | foreach{$i += [int](get-content $_ | measure-object -line)};$i 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [], RuntimeException 
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException 

なぜこの操作は動作しませんし、それはどのように解決されるだろうか? ディレクトリ内のすべてのファイルの行数をすばやく取得できますか。あなたが行を取得する必要が

+0

ワンライナー:あなたのパスに(ディレクトリ| GC |対策・オブジェクト).Countこのため –

答えて

2

$i=0;ls -File | foreach{$i += [int](get-content $_ | measure-object -line).Lines};$i 

は、私はまた、唯一のファイルの内容を取得するには、ls/GCIへ - ファイルスイッチを追加しました。

の別名を持つバージョンが展開:

$i=0;Get-ChildItem -File | ForEach-Object {$i += [int](Get-Content $_ | Measure-Object -line).Lines};$i 
+0

ありがとう。 ".Count"は1を返しますが、 ".Lines"はファイル内の実際の行数を返しますので、これを次のように変更しました: $ i = 0; ls | foreach {$ i + =(get-content $ _ | measure-object -line).lines}; $ i が動作します:) –

+0

私の一部である@OrangeReceptacleが失敗します。私の例をアップしました! – TechSpud

+0

更新をお寄せいただきありがとうございます。私はあなたの回答を受け入れました。 –

関連する問題