gpt4 book ai didi

batch-file - if else 嵌套在 BAT 文件中,我做错了什么?

转载 作者:行者123 更新时间:2023-12-02 07:34:23 29 4
gpt4 key购买 nike

我有以下 bat 文件:

@ECHO off
set ErrorThreshold=
set j=5

IF "%ErrorThreshold%"=="" (
echo a
) ELSE (
IF %j% GTR %ErrorThreshold% (
echo b
) ELSE (
echo c
)
)

如果 ErrorThreshold 没有值,则程序报告The syntax of the command is incorrect.。如果我设置一个值,一切正常。

谁能帮我找出问题所在?

最佳答案

从逻辑上讲,只有当外部 IF 语句为假时,才会执行内部 IF 语句。但是批量解析复杂的语句并一次通过括号内的 block 。已解析 block 中的每一行都必须是有效语法,即使它没有被执行也是如此。

正常的变量扩展发生在语句被解析之前。因此,如果 undefined variable ,则内部 IF 语句变为 IF 5 GTR (,这是无效语法。

您可以通过将两边括在引号中来消除语法错误:IF "%j%"GTR "%ErrorThreshold%"。但是这样比较就不是数字了。

您可以改为在两边添加 0。这将保留数字比较,并且只要数字的大小不超过带符号的 32 位整数的限制就可以工作:

IF "%ErrorThreshold%"=="" (
echo a
) ELSE (
IF %j%0 GTR %ErrorThreshold%0 (
echo b
) ELSE (
echo c
)
)

另一种选择是将复杂语句分解为多个语句,如果变量未使用 GOTO 定义,则跳过第二个 IF:

IF "%ErrorThreshold%"=="" (
echo a
goto skip
)
IF %j% GTR %ErrorThreshold% (
echo b
) ELSE (
echo c
)
:skip

还有一个选择是使用延迟扩展,它发生在语句被解析之后。 IF 语句将在解析时看到文本 !ErrorThreshold!,然后该值仅在执行时变为 NULL。但由于先前的 IF 语句,它永远不会执行,所以一切都很好。

@ECHO off
setlocal enableDelayedExpansion
set ErrorThreshold=
set j=5

IF "%ErrorThreshold%"=="" (
echo a
) ELSE (
IF !j! GTR !ErrorThreshold! (
echo b
) ELSE (
echo c
)
)

注意:您可以使用 if not defined ErrorThreshold 代替 IF "%ErrorThreshold%"==""

关于batch-file - if else 嵌套在 BAT 文件中,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342919/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com