什么是Windows等效于Linux命令wC语言 l?



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

wc -l C:/inputdirectory/P*

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

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

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

*注意,命令本身没有说"输入目录",它有正确的目录,只是太乏味和私密而无法输入

由Eryk Sun提供:

尝试搜索"",即空字符串;仅使用反斜杠作为路径分隔符;如果路径中有空格,则用引号括起来:

find /c /v "" "C:inputdirectoryP*"

注意:如果您只需要单个输入文件的行数,那么一个简单的解决方案(将整个文件加载到内存中(是,例如,(gc file.txt).Count(gcGet-Content的内置别名(.
更快的版本:(gc -ReadCount 0 file.txt).Count

cmd.exe(命令提示符/批处理文件(,这是过时的

  • 使用接受的答案。

PowerShell,你有两个选项

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

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

在手头的情况下,这可以防止PowerShell解析"",并且错误地忽略将其传递到外部目标程序(find.exe(。

有关 PowerShell 在调用外部程序时处理引号时存在很大问题的摘要,请参阅此答案。

上述find.exe命令的输出 - 实际上,任何外部程序,都只是文本,在这种情况下,它看起来像这样:

---------- PFILE1.TXT: 42
---------- PFILE2.TXT: 666
...

虽然此输出对于人类观察者来说很容易掌握,但它会使后续的编程处理变得繁琐,因为需要文本解析。

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


  • 选项 B(首选(:将 PowerShell 自己的Measure-Objectcmdlet 与-Line开关配合使用:

注意:虽然此命令比find解决方案更详细但由于输出具有类型化属性的对象,它最终提供了更大的灵活性,这极大地方便了后续处理;此外,PowerShell 复杂的输出格式系统提供了用户友好的默认表示形式。

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

上面的输出对象分别具有.File.Lines属性,默认情况下,PowerShell 将按如下所示打印这些对象:

File                         Lines
----                         -----
C:inputdirectoryPfile1.txt    42
C:inputdirectoryPfile2.txt   666
...

除了更好的输出呈现之外,输出的面向对象性质还使以编程方式处理结果变得容易。

例如,如果要将输出限制为行数为100或更大的文件,请通过管道传输到以下Where-Object调用上述命令:

... | Where-Object Lines -ge 100

如果(另外(想要先按最高行数排序,请通过管道传输到Sort-Objectcmdlet:

... | Sort-Object -Descending Lines

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

使用以下批处理文件 (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 命令行的 A-Z 索引 - 与 Windows cmd 行相关的所有内容的绝佳参考。
  • dir - 显示文件和子文件夹的列表。
  • find - 在文件中搜索文本字符串并显示找到它的所有行。
  • for/f - 针对另一个命令的结果循环命令。

最新更新