Batch file 批处理脚本检查文件大小方法?

Batch file 批处理脚本检查文件大小方法?,batch-file,Batch File,我的一个脚本中有以下代码,但它似乎不可靠。似乎如果文件实际小于1,它可能会失败。至少对某人来说是这样。我做错了什么,还是有更好的方法 简而言之,检查file.txt是否大于0: for /f %%i in ("file.txt") do set size=%%~zi rem added THIS: if not defined size set size=0 if %size% gtr 0 ( type file.txt >> %FNAME% ) else (

我的一个脚本中有以下代码,但它似乎不可靠。似乎如果文件实际小于1,它可能会失败。至少对某人来说是这样。我做错了什么,还是有更好的方法

简而言之,检查file.txt是否大于0:

for /f %%i in ("file.txt") do set size=%%~zi
    rem added THIS:  if not defined size set size=0
if %size% gtr 0 (
    type file.txt >> %FNAME%
) else (
    echo     No Data Found On System >>  %FNAME%
)

编辑:问题是使用我在上游更改的代码创建的。基本上就是这样,file.txt可能永远不会被创建。我在代码中将file.txt重命名为类似foobar.txt的名称,以复制该问题。将if not defined size set size=0似乎解决了这个问题。

我唯一能想到的是文件必须不存在,在这种情况下,%%~zi将扩展为零而不是0。如果未定义大小,则可通过在之后显式将大小设置为0轻松解决此问题

for /f %%i in ("file.txt") do set "size=%%~zi"
if not defined size set size=0
if %size% gtr 0 (
    type file.txt >> %FNAME%
) else (
    echo     No Data Found On System >>  %FNAME%
)

我能想到的唯一一件事是文件不能存在,在这种情况下,%%~zi将扩展为零而不是0。如果未定义大小,则可通过在之后显式将大小设置为0轻松解决此问题

for /f %%i in ("file.txt") do set "size=%%~zi"
if not defined size set size=0
if %size% gtr 0 (
    type file.txt >> %FNAME%
) else (
    echo     No Data Found On System >>  %FNAME%
)

你确定这就是失败的代码吗?除非代码包含在一个较大的括号中,否则我看不出它怎么会失败。不需要设置大小。您可以将IF语句放在DO子句中,并用%%~zi替换%size%。那么你就不必担心被放在括号内的代码块里了。我敢肯定是这样的。当我在另一个人的系统上运行时,我在代码中添加了标记,结果它在这里出错了。它不是在另一个代码中,而是在一个函数中。我们将他的系统更改为在file.txt中有1个条目,因此它可以工作>0。这让我很担心,因为我在代码的其他地方也使用了它。我想我已经测试过了。你确定这就是失败的代码吗?除非代码包含在一个较大的括号中,否则我看不出它怎么会失败。不需要设置大小。您可以将IF语句放在DO子句中,并用%%~zi替换%size%。那么你就不必担心被放在括号内的代码块里了。我敢肯定是这样的。当我在另一个人的系统上运行时,我在代码中添加了标记,结果它在这里出错了。它不是在另一个代码中,而是在一个函数中。我们将他的系统更改为在file.txt中有1个条目,因此它可以工作>0。这让我很担心,因为我在代码的其他地方也使用了它。我想我已经全部测试过了。如果GTR尺寸为2^31呢?比较将失败。NEQ而非全球技术法规应解决该问题。如果大于2^31,则该值将为negative@captcha-不,如果尺寸为GEQ 2^31,它实际上可以正常工作,因为if的工作方式有一个怪癖。大于2^31-1的数字被IF视为等于2^31-1。有关更多信息,请参阅。@Stephan-No,IF不会将溢出数视为负数。请参阅我之前对captcha的评论。这就是问题所在,基本上,上游的一些代码更改可能会导致在某些情况下永远无法创建file.txt。谢谢你的帮助。非常感谢-如果全球技术法规尺寸为2^31怎么办?比较将失败。NEQ而非全球技术法规应解决该问题。如果大于2^31,则该值将为negative@captcha-不,如果尺寸为GEQ 2^31,它实际上可以正常工作,因为if的工作方式有一个怪癖。大于2^31-1的数字被IF视为等于2^31-1。有关更多信息,请参阅。@Stephan-No,IF不会将溢出数视为负数。请参阅我之前对captcha的评论。这就是问题所在,基本上,上游的一些代码更改可能会导致在某些情况下永远无法创建file.txt。谢谢你的帮助。非常感谢-