2009-02-18 14 views
24

Estoy tratando de encontrar una manera de contar el número total de líneas en todos los archivos fuente de un proyecto que tengo. He intentado conectar dir -r -name al measure-object -line, pero eso solo cuenta la cantidad de archivos que tengo.Encontrar el número de líneas en un proyecto con powershell

¿Alguien tiene un script para hacer esto?

Respuesta

9

Gracias a todos los que respondieron. La forma en que terminó llevando a cabo esto era

dir . -filter "*.cs" -Recurse -name | foreach{(GC $_).Count} | measure-object -sum 
+0

Parece que no funciona ... –

+0

dir. -filter "* .cs" -Recurse | foreach {(gc $ _). Count} | measure-object -sum –

+0

Corregido para funcionar. Debo señalar que el tuyo tampoco parece funcionar. –

5

dir **. Txt -recurse | seleccionar Nombre completo, @ {name = "LineCount"; la expresión = {@ (get-content $ _ nombre_completo.) .count}}

+0

Esto comando no funciona para mí. Obtengo varios "Seleccionar objeto: no se puede enlazar el argumento con el parámetro 'Ruta' porque es nulo." errores – aphoria

+0

Te estoy votando porque no sabía sobre el comando de selección, y estoy un poco feliz por ello. Aún así, aunque usaste '$ __' en lugar de '$ _', usaste' dir * .txt' en lugar de 'dir -filter" * .txt "', y tu resultado todavía me hace agregar todo cuando He terminado. –

+0

Perdón por eso, Dan, el editor no mostró $ _ así que lo doblé, ¡gracias por votar! –

7
Get-ChildItem . -Include *.txt -Recurse | foreach {(Get-Content $_).Count} 

condensada un poco con los alias:

GCI . -Include *.txt -Recurse | foreach{(GC $_).Count} 

Will dé resultados similares a esto:

Lines Words    Characters    Property 
----- -----    ----------    -------- 
    21 
    40 
    29 
    15 
    294 
    13 
    13 
    107 

EDITAR: Modificado para recurse a través de subcarpetas.

EDIT 2: Se eliminó el uso de Measure-Object.

25
Get-ChildItem -Filter "*.cs" -Recurse | Get-Content | Measure-Object -line 
+0

Get-ChildItem * .cs -Recurse recurrirá al directorio, pero (en powerhell 1.0 al menos) solo mostrará los archivos que terminan en .cs en el directorio actual. –

+0

Gracias! Sí, porque en este caso, * .cs coincide con la 'ruta', en lugar del parámetro 'filtro'. Para solucionarlo, puede escribir: Get-ChildItem. * .cs -Recurse ... o Get-ChildItem -Filter "* .cs" -Recurse ... – Alex

1

acabo expiremented un poco y encontré que este comando en efecto medir todos los archivos de C# de forma recursiva:

Get-ChildItem -Filter *.cs -Recurse | Get-Content | Measure-Object -Word -Line -Character

0

imprime el nombre del archivo y el conteo de líneas:

Get-ChildItem -re -in "*.cs" | 
Foreach-Object { 
    $fileStats = Get-Content $_.FullName | Measure-Object -line 
    $linesInFile = $fileStats.Lines 
    Write-Host "$_=$linesInFile" 
} 
Cuestiones relacionadas