用于检查文件大小的批处理脚本 - 错误消息

时间:2017-01-06 17:07:58

标签: windows batch-file cmd

我有一个批处理文件,用于检查文件大小但会导致出现错误消息“3072此时意外”。这是代码:

rem @echo off
setlocal EnableDelayedExpansion
set minbytesize=3072

if %~z1 LSS %minbytesize%
    echo.failed
ELSE
    echo.passed

使用Windows“call”命令从另一个软件执行批处理文件,并将文件名作为%1参数传递给该批处理。在& 1参数中添加~z确实解析为文件大小。

我已尝试过“if”行中“,%和!”的不同组合,但尚未取得任何成功。有关其他什么可能缺失的想法吗?

1 个答案:

答案 0 :(得分:4)

在这段短代码中你有两个不相关的问题会导致两个不同的错误。

假设您传入了一个有效的文件参数,那么您将收到以下错误消息: 该命令的语法不正确。 这是因为您的IF语法错误。如果希望IF命令跨越多行,则必须使用括号(或行继续,但不太常用)。

@echo off
setlocal EnableDelayedExpansion
set minbytesize=3072

if %~z1 LSS %minbytesize% (
    echo.failed
) else (
    echo.passed
)

但是如果您忘记提供文件参数,或者文件不存在,您仍然会遇到问题。在这种情况下,%~1会扩展为空字符串,因此命令变为:

if  LSS 3072 (

生成的语法无效: 3072此时出乎意料。 收到该错误消息,因为LSS被解释为左侧比较,之后解析器需要一个比较运算符,但是会看到3072

也许解决此问题的最简单方法是将%~1的值存储在变量中,然后如果变量未定义,则将值设置为0.

@echo off
setlocal EnableDelayedExpansion
set minbytesize=3072
set size=%~z1
if not defined size set size=0

if %size% LSS %minbytesize% (
    echo.failed
) else (
    echo.passed
)