我想使用批处理来计算文件中的行数。
我经历过这,但我是初学者,无法理解。我用基础知识编写了自己的代码。
@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