2014-07-11 41 views
1

我有一個包含50個子文件夾的文件夾,在這些子文件夾中有各種不同的文本文件。我可以運行什麼PowerShell腳本來計算這些文件中的字符?計算多個文件夾中的多個文件中的字符

+0

你想每個文件夾,每個文件或只有一個總計?空格是否被視爲字符? – mjolinor

+0

沿着這些相同的路線,做標點計數,或者你只是在尋找一個字母數字計數? – TheMadTechnician

回答

0

是否低於適合於您的需求:

wc -l */* 

這是一個UNIX命令。

+0

wc甚至不是一個powershell命令,我不明白這是如何回答他的問題。 – TheMadTechnician

2
$results= @{} 
Get-ChildItem -Path C:\Temp -Filter *.txt -Recurse | ForEach-Object{ 

    $count = Get-Content $_.FullName | Measure-Object -Character 
    $results.Add($_.FullName, $count.Characters)} 
$results 

輸出:

Name       Value                    
----       -----                    
C:\Temp\EventCombMT.txt  3724                    
C:\Temp\features.txt   222                     
C:\Temp\2test.txt    12                     
C:\Temp\winpe\realtekLan\no... 147 

名稱:txt文件的完整路徑。 價值:字數。我確定它存在,但我無法找到它如何計算字符的信息。如果您需要空格不計算有一個開關-IgnoreWhiteSpace:$true

該將採取「c:temp」目錄和子目錄中的所有txt文件。每個文件的內容都被傳送到Measure-Object來計算字符。文件的全名和它的字符數被放入哈希表中。在這種形式下,你可以進一步操縱它。當然還有其他的事情可以做。這只是我的看法。

有關哈希的更多信息:http://technet.microsoft.com/en-us/library/ee692803.aspx

措施,對象http://blogs.technet.com/b/heyscriptingguy/archive/2011/10/09/use-a-powershell-cmdlet-to-count-files-words-and-lines.aspx

+0

當然,還有其他方法可以做到這一點,但你的方法簡單而有效。比我要做的要好得多(將它分解成一個字符數組並且以這種方式計算)。 – TheMadTechnician

0

cmdlet將獲取內容輸出字符串對象。 字符串對象的財產「長度」對應的字符數的字符串: http://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx

所以,你可以contruct計算特性稱爲「字符數」爲每個文件,就像這樣:

Get-ChildItem -Path C:\Test\*.txt -Recurse | 
Select-Object -Property Name, @{N="Number of Characters";E={ (get-content $_).length } } 

Output : 
Name      Number of Characters 
----      -------------------- 
New Text Document (2).txt     15 
New Text Document (3).txt     852 
New Text Document.txt      629 

如果你想字符的文件夾中的所有.txt文件總數,存儲上面的命令到一個變量($ TEXTFILES,例如),並使用測量 - 對象:

$TextFiles | Measure-Object -Property "Number of Characters" -Sum 

輸出:

Count : 3 
Average : 
Sum  : 1496 
Maximum : 
Minimum : 
Property : Number of Characters 
+0

如果文件中有多行,我相信(get-content $ _).length會告訴你文件中的行數,而不是字符數。 – mjolinor

0

運行V4,我通過這個跑了大約舊郵件日誌的四分之一演出:

Get-ChildItem C:\maillogs\*3.s | 


foreach { 
      &{ 
      $ofs = '' 
      $Count=0 
      Get-Content $_ -ReadCount 1000 | 
      foreach { $count += ([string]$_).length } 
      [PSCustomObject]@{Name = $_.Name ; Count = $Count} 
      } 
     } | Format-Table -AutoSize 



Name      Count 
----      ----- 
[email protected] 98479479 
[email protected]140602T163433.s 88578000 
[email protected] 754640 
[email protected] 61444158 
[email protected] 31823480 
[email protected] 633925 
約22秒

相關問題