Windows下相当于Linux命令wc -l的Windows?

时间:2018-06-21 19:29:04

标签: linux windows command-line cmd

我有一段代码旨在将以下内容发送到linux命令行:

  

wc -l C:/ inputdirectory / P *

但是,我需要在Windows中运行此脚本,并试图找到等效的命令。我尝试过

  

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

但这会引发错误,表明/ v不是有效命令。你能告诉我为什么这不起作用吗?

*请注意,该命令本身未显示“ inputdirectory”,它具有正确的目录,太繁琐且私有,无法键入

3 个答案:

答案 0 :(得分:1)

尝试搜索"",即一个空字符串;仅使用反斜杠作为路径分隔符;并引用路径中是否有空格:find /c /v "" "C:\inputdirectory\P*"-eryksun

答案 1 :(得分:1)

我如何计算一组文件中的行数?

使用以下批处理文件(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*

进一步阅读

答案 2 :(得分:0)

来自cmd.exe (命令提示符/一个批处理文件),该文件已过时

PowerShell 中,您有两个选项

  • 选项A(次优也可以使用接受的答案,并稍作调整:
find --% /c /v "" "C:\inputdirectory\P*"

注意:停止解析符号--%告诉PowerShell将后续参数按原样传递给目标程序(在扩展cmd样式的环境变量引用(例如{{1 }}(如果有)。

在当前情况下,这将阻止PowerShell分析%USERNAME%和-mistakenly-忽略将其通过传递到外部目标程序("" )。

有关PowerShell在调用外部程序时对引号引起的严重问题的处理的摘要,请参见this answer

上面find.exe命令的

输出-实际上,任何外部程序都是 text ,在这种情况下,它看起来像这样:

find.exe

尽管此输出对于人类观察者来说很容易 ,但由于需要进行文本解析,因此使得随后的编程性处理繁琐。 / p>

如下所述,使用PowerShell本机命令(cmdlet)可提供更大的灵活性,因为PowerShell命令通常会发出具有类型属性对象,这极大地促进了后续处理


  • 选项B(首选通过---------- PFILE1.TXT: 42 ---------- PFILE2.TXT: 666 ... 开关使用PowerShell自己的Measure-Object cmdlet:

注意:尽管此命令比-Line解决方案更详细,但由于通过输出 objects ,最终提供了更大的灵活性。类型化的属性,极大地方便了后续处理;此外,PowerShell复杂的输出格式系统还提供了用户友好的默认表示形式。

find

上述输出的对象分别具有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属性,PowerShell默认将其输出如下:

.Lines

除了输出的更好的表示之外,输出的面向对象性质还使得可以轻松地以编程方式处理结果。

例如,如果您希望将输出限制为行数为File Lines ---- ----- C:\inputdirectory\Pfile1.txt 42 C:\inputdirectory\Pfile2.txt 666 ... 或更高的文件,则通过管道将其传递到以下对上述命令的Where-Object调用:

100

如果(另外)您想首先按最高行数进行排序,请通过管道传递到Sort-Object cmdlet:

... | Where-Object Lines -ge 100