获取文件夹中文本文件行的计数

时间:2014-03-25 11:07:32

标签: batch-file powershell

我有一个每天用txt文件填充的文件夹。在复制之前,他们的名字是未知的。 我想要做的是获得每个文件的行数。

e.g。 C:\文件夹\ 包含1.txt 2.txt 3.txt。

我想要一些可以将文件名和行数统计到一个文件中的东西。

6 个答案:

答案 0 :(得分:0)

cd C:\Folder\
ls | % { 
    $c = (gc $_).Count; 
    Write-Output ($_.Name.PadRight(40) + "Count: " + $c) } > C:\logs\lines.log

答案 1 :(得分:0)

@echo off
(
  for %%a in ("c:\folder\*.txt") do for /f %%b in ('find /c /v "" ^<"%%~fa"') do echo(%%~nxa %%b
) > "c:\somewhere\outputfile.log"

对于列表中的每个文件,计算其行和输出到日志文件的名称和行数

或者更快的版本,因为find命令只执行一次

( 
   for /f "tokens=1,*" %%a in ('find /c /v "" "c:\folder\*.txt"') do @echo(%%b
)>"c:\somewhere\outputfile.log"

答案 2 :(得分:0)

这是一种批处理方式

@echo off
setlocal enabledelayedexpansion

set cnt=0
set "out=output.txt"
if exist %out% del /q %out%
for /f %%a in ('dir /b /a-d') do (
    for /f %%b in ('type "%%a"^|find /v /c ""') do (
      set /a cnt=%%b & >>%out% echo(%%~nxa : %%b
    )
)

将上述代码复制到名为whatever.cmd的文件中,并从文件所在的目录运行它。

答案 3 :(得分:0)

这是一个PowerShell解决方案:

$x = 0
$logfile = "$env:temp\MyLog.txt"
$files = get-childitem c:\
foreach($file in $files)
 {
  $x++
  "File: $($file.name) Count: $x FullPath: $($file.fullname)" | out-file $logfile -Append
 }

糟糕,经过编辑,包括将信息输出到日志文件中。

答案 4 :(得分:0)

将Powershell与哈希表一起使用:

$counts = @{}
foreach ($file in Get-ChildItem C:\FOLDER)
 { get-content $file -ReadCount 1000 |
   foreach { $counts[$file] += $_.count}
 }

 $counts

答案 5 :(得分:0)

长版:

$files = Get-ChildItem 'd:\*.txt'

ForEach ($file in $files) {
    $lineCount = Get-Content -LiteralPath $file | Measure-Object | Select-Object -ExpandProperty Count
    Write-Output "File $($file.Name) has $lineCount lines"
    if ($lineCount -gt 50) {
        Write-Warning "Warning $($file.Name) is too big"
    }
}

(如果您重定向到文件,警告不会转到该文件。)

Squished版本(无警告):

gci *.txt | %{ write "$_ has $((gc -LiteralPath $_ | measure).Count) lines";  }

Squished版本(带警告,无法输出到文件):

gci *.txt | %{ $c=(gc -LiteralPath $_ | measure).Count; $w="Write"; if ($c -gt 50) { $w+="-Warning" }; &$w "$_ has $c lines" }