【问题标题】:Batch script for checking file size - Error message检查文件大小的批处理脚本 - 错误消息
【发布时间】:2017-01-06 17:07:57
【问题描述】:

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

rem @echo off
setlocal EnableDelayedExpansion
set minbytesize=3072

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

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

我在 "if" 行中尝试了不同的 "、% 和 ! 组合,但还没有成功。关于还有什么可能遗漏的想法?

【问题讨论】:

  • @KraangPrime - 这完全是无用的建议,与错误无关。 ENDLOCAL 不是必需的。

标签: windows batch-file cmd


【解决方案1】:

您在这短短的代码中有两个不相关的问题,可能会产生两个不同的错误。

假设你传入了一个有效的文件参数,那么你会得到这个错误信息:命令的语法不正确。 那是因为你的 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
)

【讨论】:

  • 我知道它必须是一些简单的东西,但我盯着它看了这么久,我只是在画空白。感谢您为我指明正确的方向。 @dbenham 你的建议正是我所需要的。现在一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多