我有一个批处理文件,用于检查文件大小但会导致出现错误消息“3072此时意外”。这是代码:
rem @echo off
setlocal EnableDelayedExpansion
set minbytesize=3072
if %~z1 LSS %minbytesize%
echo.failed
ELSE
echo.passed
使用Windows“call”命令从另一个软件执行批处理文件,并将文件名作为%1参数传递给该批处理。在& 1参数中添加~z确实解析为文件大小。
我已尝试过“if”行中“,%和!”的不同组合,但尚未取得任何成功。有关其他什么可能缺失的想法吗?
答案 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
)