2009-02-18 12 views
24

Sto cercando di trovare un modo per contare il numero totale di linee in tutti i file sorgente di un progetto che ho. Ho provato a collegare dir -r -name a measure-object -line, ma questo conta solo il numero di file che ho.Trova il numero di linee in un progetto con PowerShell

Qualcuno ha uno script per farlo?

risposta

9

Grazie a tutti quelli che hanno risposto. Il modo in cui ho finito per attuando questo era

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

Non sembra funzionare ... –

+0

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

+0

Risolto il problema. Vorrei sottolineare che anche il tuo non sembra funzionare. –

5

dir **. Txt -recurse | selezionare Fullname, @ {name = "LineCount"; l'espressione = {@ (Get-Content $ _ fullname.) .count}}

+0

Questo il comando non funziona per me. Ottengo diversi "Select-Object: Impossibile associare l'argomento al parametro 'Path' perché è null." errori. – aphoria

+0

Ti sto votando perché non sapevo del comando select, e sono abbastanza entusiasta al riguardo. Ancora, però - hai usato '$ __' invece di '$ _', hai usato' dir * .txt' invece di 'dir -filter" * .txt "', e il tuo risultato mi fa comunque aggiungere tutto quando Ho finito. –

+0

Ci scusiamo per Dan, l'editor non ha mostrato $ _ quindi l'ho raddoppiato, grazie per aver votato! –

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

Condensed giù un po 'con gli alias:

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

Will dare risultati simili a questo:

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

MODIFICA: modificato per recurse tramite sottocartelle.

MODIFICA 2: uso rimosso di Measure-Object.

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

Get-ChildItem * .cs -Recurse reciterà la directory, ma (in powershell 1.0 almeno) mostrerà solo i file che terminano con .cs nella directory corrente. –

+0

Grazie! Sì, perché in questo caso, * .cs corrisponde al "percorso", piuttosto che al parametro "filtro". Per risolvere, puoi scrivere: Get-ChildItem. * .cs -Recurse ... o Get-ChildItem -Filter "* .cs" -Recurse ... – Alex

1

Ho appena expiremented un po 'e ho trovato che questo comando effettivamente misurare tutti i file C# in modo ricorsivo:

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

0

stampa il nome del file e il numero di riga:

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