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

bob*_*bob 1 windows batch-file

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

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

MC *_* ND 5

尺寸可以通过以下方式检查

for %%a in ("file.txt") do echo %%~za
Run Code Online (Sandbox Code Playgroud)

其中%%~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
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 第二个命令为 分配一个空格eol。虽然看起来我们只是更改了有问题的字符,但当分for /f词器解析这些行时,该delims子句优先于eol(更多信息,请参见此处),因此在将空格视为分隔符之前,它们将被删除eol