簡體   English   中英

Windows下相當於Linux命令wc -l的Windows?

[英]What is the windows equivalent of Linux command wc -l?

我有一段代碼旨在將以下內容發送到linux命令行:

wc -l C:/ inputdirectory / P *

但是,我需要在Windows中運行此腳本,並試圖找到等效的命令。 我努力了

查找/ c / v C:/ inputdirectory / P *

但這會引發錯誤,表明/ v不是有效命令。 您能告訴我為什么這不起作用嗎?

*請注意,該命令本身未顯示“ inputdirectory”,它具有正確的目錄,太繁瑣且私有,無法鍵入

Eryk Sun提供

嘗試搜索"" ,即一個空字符串; 僅使用反斜杠作為路徑分隔符; 並引用路徑(如果其中包含空格):

find /c /v "" "C:\inputdirectory\P*"

如何計算一組文件中的行數?

使用以下批處理文件(CountLines.cmd):

@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq" %%a in (`dir /b %1`)  do (
  for /f "usebackq" %%b in (`type %%a ^| find "" /v /c`) do (
    set /a lines += %%b
    )
  )
echo %lines%
endlocal

用法:

CountLines C:/inputdirectory/P*

進一步閱讀

  • Windows CMD命令行的AZ索引 -Windows cmd行相關的所有內容的出色參考。
  • dir-顯示文件和子文件夾的列表。
  • 查找 -在文件中搜索文本字符串並顯示找到它的所有行。
  • / f-針對另一個命令的結果循環命令。

cmd.exe (命令提示符/ 批處理文件 )中,已過時

PowerShell中 ,您有兩個選擇

  • 選項A( 次優 :稍作調整, 也使用可接受的答案
find --% /c /v "" "C:\inputdirectory\P*"

注意: --% (停止分析符號)告訴PowerShell將后續參數按原樣傳遞給目標程序(在擴展cmd樣式的環境變量引用(例如%USERNAME% ,如果有)之后)。

在當前情況下,這會阻止PowerShell分析""並且-會錯誤地 - 忽略將其傳遞給外部目標程序( find.exe )。

有關PowerShell在調用外部程序時對引號的處理有很大問題的摘要,請參見以下答案

上面的find.exe命令的輸出-以及實際上任何外部程序的輸出都是text ,在這種情況下,它看起來像這樣:

---------- PFILE1.TXT: 42

---------- PFILE2.TXT: 666

...

盡管此輸出對於人類觀察者來說很容易掌握,但由於需要文本解析,因此使后續的程序處理變得麻煩

如下所述,使用PowerShell本機命令(cmdlet)提供了更大的靈活性,因為PowerShell命令通常會發出帶有類型化屬性的 對象 ,這極大地方便了后續處理。


  • 選項B( 首選將PowerShell自己的Measure-Object cmdlet與-Line開關一起使用:

注意:雖然此命令比find解決方案更為冗長 ,但由於輸出具有類型化屬性的 對象 ,因此最終提供了更大的靈活性,這極大地方便了后續處理 此外,PowerShell復雜的輸出格式系統提供了用戶友好的默認表示形式。

Get-Item -Path "C:\inputdirectory\P*" -PipelineVariable file | ForEach-Object {
  Get-Content -LiteralPath $file |
    Measure-Object -Line |
      Select-Object @{ Name='File'; Expression={ $file } }, Lines
}

上面的輸出對象每個都有一個.File.Lines屬性 ,默認情況下,PowerShell將其打印如下:

File                         Lines
----                         -----
C:\inputdirectory\Pfile1.txt    42
C:\inputdirectory\Pfile2.txt   666
...

除了更好地呈現輸出之外,輸出的面向對象性質還使您可以輕松地以編程方式處理結果。

例如,如果要將輸出限制為行數大於或等於100文件,請通過管道將以下命令調用到以下Where-Object

... | Where-Object Lines -ge 100

如果(另外)要首先按最大行數排序,請通過管道傳遞到Sort-Object cmdlet:

... | Sort-Object -Descending Lines

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM