Powershell 如何计算文本文件中的行数并将其存储在单个文件中?

Powershell 如何计算文本文件中的行数并将其存储在单个文件中?,powershell,Powershell,您好,我使用下面的代码计算目录中每个文本文件中的行数,然后将该信息存储在单个文件中。问题是输出文件存储每个文本文件的完整路径: 输出示例: c:\Text folder\file1.txt,14 c:\Text folder\file2.txt,20 c:\Text folder\file3.txt,25 我需要这样的输出: c:\Text folder\file1.txt,14 c:\Text fol

您好,我使用下面的代码计算目录中每个文本文件中的行数,然后将该信息存储在单个文件中。问题是输出文件存储每个文本文件的完整路径: 输出示例:

c:\Text folder\file1.txt,14                  
c:\Text folder\file2.txt,20          
c:\Text folder\file3.txt,25
我需要这样的输出:

c:\Text folder\file1.txt,14                  
c:\Text folder\file2.txt,20          
c:\Text folder\file3.txt,25
file1,14   
file2,20   
file3,25
谢谢你的帮助。这是我的代码:

c:\Text folder\file1.txt,14                  
c:\Text folder\file2.txt,20          
c:\Text folder\file3.txt,25
Clear-Host
Get-ChildItem -re -in $include -ex $exclude $path |
Foreach-Object { Write-Host "Counting $_.FullName"                 
$fileStats = Get-Content $_.FullName | Measure-Object -line
$linesInFile = $fileStats.Lines
"$_,$linesInFile" } | Out-File $outputFile -encoding "UTF8"
Write-Host "Complete"

使用
FileInfo
-对象的
Basename
属性

c:\Text folder\file1.txt,14                  
c:\Text folder\file2.txt,20          
c:\Text folder\file3.txt,25
"$($_.BaseName),$linesInFile"
您可以通过执行以下操作来简化行计数:

c:\Text folder\file1.txt,14                  
c:\Text folder\file2.txt,20          
c:\Text folder\file3.txt,25
$linesInFile = @(Get-Content -Path $_.Fullname).Count

使用
BaseName
属性,与完整的
Get-ChildItem | Get-Member

c:\Text folder\file1.txt,14                  
c:\Text folder\file2.txt,20          
c:\Text folder\file3.txt,25
#Parameters:
# path - the path containing the code files
# outputFile - fully qualified path of the file 
# include (Optional) - file mask(s) to include in the count (deafults to *.*)
# exclude (Optional) - file mask(s) to exclude in the count (defaults to none)
# Example (count lines in target path including *.cs but excluding *.designer.cs)
# .\countLOC.ps1 -path "C:\code\MyProject" -outputFile "C:\code\loc.csv" -include "*.cs" -exclude "*.designer.cs"
param(  [string]$path=".",                            # debug current directory if omitted
        [string]$outputFile="$env:TEMP\37514786.txt", # debug some file
        [string]$include = "*.*", 
        [string]$exclude = "")

Clear-Host
Get-ChildItem  -re -in $include -ex $exclude $path |
Foreach-Object { 
    Write-Host "Counting $_.FullName"                 
    $fileStats = Get-Content $_.FullName | Measure-Object -line
    $linesInFile = $fileStats.Lines
    "$($_.BaseName),$linesInFile" 
               } | Out-File $outputFile -encoding "UTF8"
Write-Host "Complete"
# debug Get-Content $outputFile | Measure-Object -line

谢谢你的帮助。它如果工作正常,但你所说的“简化行数”。它会跑得更快吗?你能提出一些改进建议吗?怎样才能加快我的代码的运行?我在一个文件夹中有数千个文本文件,计算所有文件中的行数需要一些时间。是的,这会更快(除非您的文件是100Mb+)。所需使用的cmdlet越少=开销越小=性能越好。使用streamreader会更快,但优化不是这个问题的一部分。这只是一条注释,因此您可以跳过
measure对象
cmdlet.:-)