windows批处理:如何检查文本文件是否为空(该文件有一个空行,因此大小不是零)



文件的问题是有时它包含一个空行,因此大小不是零。我试过这个,但因为它有一个空行,所以它返回1而不是0。有什么建议可以解决吗?

set /a varTestPoints=0
for /f %%a in ('type "file.txt"^|find "" /v /c') do set /a varTestPoints=%%a

可以使用检查尺寸

for %%a in ("file.txt") do echo %%~za

其中%%~za%%a 引用的文件的大小

要测试文件是否只包含空行,可以使用中的任何命令

(for /f usebackq^ eol^= %%a in ("file.txt") do break) && echo has data || echo empty
(for /f "usebackq eol= " %%a in ("file.txt") do break) && echo has data || echo empty

如果for /f找不到包含数据的行,则会引发一个错误,可以使用&&||条件执行运算符进行检查

注意在检查空行的原始代码中,for /f中跳过以分号开头的行的默认行为将使文件中以;开头的行中的测试失败。现在,代码还通过两种不同的方式处理这种情况。

  • 在第一个命令中,通过为eol子句指定一个或多个空列表分隔符来禁用它。

  • 第二个命令为eol分配一个空间。虽然我们似乎只是简单地更改了有问题的字符,但当for /f标记器解析行时,delims子句的优先级高于eol(此处有更多信息),因此在将空格视为eol之前,它们将被删除为分隔符。

只有一个空行的文件将有2个字节长(CR,LF)。您可以通过检查总文件大小是否小于或等于2来检测此问题。

for %%a in (file.txt) do if %%~za LEQ 2 echo File has no more than 2 bytes

这可能不适用于其他有更多文本的文件,但这些文件仍然完全由空白组成,因此看起来"空"。例如,一个包含一个制表符和一个换行符的文件将有3个字节。您可以调整"空白"文件的定义,并相应地调整代码。

如果您对"空"文件的定义是只包含空白,而不考虑长度,那么上面的解决方案将不起作用。相反,您可以使用for /F来解析该文件。读取文件时,for /F只匹配包含非空白字符的行。如果它找到一个,则该文件不是"空白"的。

set "fileIsBlank=1"
for /F %%a in (file.txt) do set "fileIsBlank=0"
if %fileIsBlank% EQU 0 echo File has non-blank lines in it..

最新更新