Windows批处理:如何检查文本文件是否为空(文件为空行,因此大小为非零)

时间:2015-11-06 21:24:52

标签: windows batch-file

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

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

2 个答案:

答案 0 :(得分:4)

可以使用

检查尺寸
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无法找到包含数据的行,则会引发错误,可以使用&&||条件执行运算符检查

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

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

  • 第二个命令为eol分配一个空格。虽然看起来我们只是更改了有问题的字符,但当for /f标记器对这些行进行解析时,delims子句优先于eol(更多信息here ),因此空格将被删除为分隔符,然后才能将其视为eol

答案 1 :(得分:1)

一个空白行的文件长度为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..