Counting lines of source code with PowerShell

How do you count the lines of code your application has? As far as I know Visual Studio does not provide this functionality, so needless to say, we are doing that with PowerShell ;)

$num = 0
dir c:\root\ -include *.cs -Recurse | ForEach-Object { 
	$file=[array](Get-Content $_ ) 
	$num += $file.length 
}
$num

You obviously need to change c:\root to your root folder path, and change the *.cs mask to the one applicable to your source code.

Tags: , ,

7 Responses to “Counting lines of source code with PowerShell”


  1. 1 Keith Hill October 31, 2007 at 10:37 pm

    Another approach would be:

    dir c:\root\ -include *.cs -Recurse | Get-Content | Measure -Line

  2. 2 Keith Hill October 31, 2007 at 10:37 pm

    Make that Measure-Object (measure is an alias I set up).

  3. 3 Joel "Jaykul" Bennett November 1, 2007 at 2:51 am

    By the way, “-filter *.cs” is a lot faster than “-include *.cs” … personally I like to not count empty lines, so I filter them out with something like:

    ls -recurse -filter *.cs | gc | ? { -not $_.Trim().Length -eq 0)) } | measure-object -line

    If you don’t want to count the comment lines, you could also filter those out (note that you have to change your comment string if you’re not working on C#, and that this doesn’t exclude /* comment blocks */)

    ls -recurse -filter *.cs | gc | ? { $str = $_.Trim(); -not ($str.StartsWith(“//”) -or ($str.Length -eq 0)) } | measure -line

  4. 4 xaegr November 1, 2007 at 3:20 am

    Joel, measure-object -line will skip empty lines by default. But for other commands you can filter empty lines just this way: |?{$_}

  5. 5 dmitrysotnikov November 1, 2007 at 9:53 am

    Wow, I didn’t know about Measure-Object – it turns the script into a real one-liner – which is always the goal here, right? ;)

    Learning something new every day! Thanks guys!

  6. 6 Artem November 1, 2007 at 10:15 am

    It was first script in Monad shell I’ve witten myself. Thank you for reminding :)

  7. 7 fersis November 5, 2007 at 3:57 pm

    thats very useful , i will use it
    thanks


Leave a Reply




View Dmitry Sotnikov's profile on LinkedIn

Follow Dmitry Sotnikov at Twitter

My Recent Tweets

Archives

See you at:

Legal

The posts on this blog are provided “as is” with no warranties and confer no rights. The opinions expressed on this site are mine and mine alone, and do not necessarily represent those of my employer Quest Software or anyone else for that matter. All trademarks acknowledged.

© 2007 Dmitry Sotnikov

Pages

 

October 2007
M T W T F S S
« Sep   Nov »
1234567
891011121314
15161718192021
22232425262728
293031