Orange Receptacle
Orange Receptacle

Reputation: 1183

Attempting to get the sum of all file line counts in a directory

I'm attempting to get the number of lines in all files in my directory. I've tried using some kind of variable I set to 0 and looping through all the files and getting their line number.

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

However, every time I try adding it to the variable I set to 0, it shoots out an odd error:

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

Why does this operation not work and how could it be resolved? Is there a quicker way of obtaining the number of lines in all files in a directory?

Upvotes: 1

Views: 641

Answers (1)

TechSpud
TechSpud

Reputation: 3528

You need to get the Lines:

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

I've also added the -File switch to ls/gci to only get the content of files.

Version with aliases expanded:

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

Upvotes: 2

Related Questions