文件的问题是有时它包含一个空行,因此大小不是零。我试过这个,但因为它有一个空行,所以它返回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..