如何使用批处理脚本查找文件中存在的行数

如何使用批处理脚本查找文件中存在的行数

我想使用批处理来计算文件中的行数。

我经历过,但我是初学者,无法理解。我用基础知识编写了自己的代码。

@echo off
set "file=abc.csv"
set /a x=0
for /f "usebackq delims=" %%p in ("%file%") do (
  echo %x%
  pause>nul
  set /a x=%x%+1
)

当我运行上述代码时,我得到了0作为输出。有人能帮我解决错误吗?

答案1

我想使用批处理计算文件中的行数

具体解决方案

从命令行:

F:\test>for /f "usebackq" %b in (`type abc.csv ^| find "" /v /c`) do @echo line count is %b
line count is 1

从批处理文件(countlines.cmd):

@echo off
Setlocal EnableDelayedExpansion
  for /f "usebackq" %%b in (`type abc.csv ^| find "" /v /c`) do (
    echo line count is %%b
    )
  )

例子:

F:\test>countlines
line count is 1
F:\test>

灵活的解决方案

使用以下批处理文件(countlines.cmd):

@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq" %%a in (`dir /b /s %1`)  do (
  echo processing file %%a
  for /f "usebackq" %%b in (`type %%a ^| find "" /v /c`) do (
    echo line count is %%b
    set /a lines += %%b
    )
  )
echo total lines is %lines%

笔记:

  • 总行数存储在 中%lines%
  • 批处理文件支持通配符。
  • echo ...根据需要调整命令。

用法:

countlines filename_expression

例子:

F:\test>countlines *.csv
processing file F:\test\abc.csv
line count is 1
processing file F:\test\def.csv
line count is 1
total lines is 2

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 目录- 显示文件和子文件夹的列表。
  • 寻找- 在文件中搜索文本字符串并显示找到该字符串的所有行。
  • 对于/f- 循环命令以执行另一个命令的结果。

答案2

在 Microsoft Windows 系统上计算文件行数的简单方法是使用以下命令:

find /v /c "" somefile.txt

选项/c会计算行数,而/v选项会显示所有不包含指定字符串的行。由于空字符串(即“”)被视为永不匹配,因此您应该会看到显示的文件中的行数 - 请参阅愚蠢的命令行技巧:计算标准输入中的行数Raymond Chen 的 Microsoft 开发者博客上的文章,旧事物新解释为什么这样做有效,以及最早的操作系统find 命令的版本成为保留至今的功能。MS-DOS 操作系统是微软在创建 Microsoft Windows 之前为早期 PC 提供的操作系统。

答案3

由于延迟扩展已关闭,因此计数为零。
您已经set /a x=0

x循环内部的值for不会随着而改变%x%。将其替换为!x!

尝试这个:

Setlocal EnableDelayedExpansion
@echo off
set "file=abc.csv"
set /a x=0
for /f "usebackq delims=" %%p in ("%file%") do (
  echo !x!
  pause>nul
  set /a x=!x!+1
)

使用批处理来计算文件中的行数的更简单方法:

find /v "" /c < abc.csv

相关内容