批处理文件中的多行 IF 语句内的变量值未递增 [重复]
Posted
技术标签:
【中文标题】批处理文件中的多行 IF 语句内的变量值未递增 [重复]【英文标题】:variable value not incremented inside multiline IF statement in batch file [duplicate] 【发布时间】:2021-07-05 23:25:26 【问题描述】: 我在 Windows 7 中使用命令提示符。 我发现这很奇怪,在 if 子句中修改的变量值只有在 if 子句完全执行后才会更新。 这是一个简单的例子来说明这一点。@echo off
set /a somevar=0
set match_string="match"
:loop
echo at loop beginning - somevar is %somevar%
if %match_string% equ "match" (
set /a somevar+=1
echo somevar inside if statement after increment - %somevar%
)
echo somevar after if statement is %somevar%
pause
goto loop
如何在 if 语句中更新 somevar?
谢谢。
【问题讨论】:
对这个问题的否决 - 你能把 que 分数设为零吗,因为我试图解释我的问题并编写了一个示例代码来验证。我可以删除这个问题,但回答过的专家会不知所措。而且,它可以帮助将来的人。谢谢。 【参考方案1】:你正在为缺少delayedexpansion
而苦恼
@echo off
Setlocal EnableDelayedExpansion
set somevar=0
set "match_string=match"
:loop
echo before loop: %somevar%
if "%match_string%" == "match" (
set /a somevar+=1
echo inside loop: !somevar!
)
echo after loop: %somevar%
pause>nul
goto loop
注意循环中的!somevar!
而不是%somevar%
您可以通过从cmd
运行set /?
和setlocal /?
来阅读更多信息
然而,我没有投票关闭作为重复项的原因也是为了突出您不正确的if
语句和set
ting 变量。请参阅我在答案中所做的更改。
我认为在这种特殊情况下,您不需要带括号的块,因此也不需要 delayedexpansion
。
@echo off
set somevar=0
set "match_string=match"
:loop
echo before loop: %somevar%
if "%match_string%" == "match" set /a somevar+=1
echo after if statement: %somevar%
pause>nul
goto loop
【讨论】:
我的问题旨在更新 if 语句中的变量,并在相同的 if 语句中使用更新后的值。所以我发布了一个示例,其中 if 有多个要执行的语句。 delayexpansion 看起来对此很有用。但是我认为您在写“您不需要带括号的块,因此不需要延迟扩展”时误解了 是的。我完全按照要求回答了你的问题。第二部分只是一个仅供参考。使用它,不要使用它。 好的。谢谢 。顺便说一句,我尝试了一件对我的案子有用的东西。如果要使用更新的值,我在多行之前添加了 'if "%match_string%" == "match" set /a somevar+=1'。 那么现在你有 2 个if
语句?对于同样的情况?那是不是有点低效?你有很多选项要实现,所以如果你不喜欢使用delayedexpansion
,那么在操作块中使用call
,然后你可以添加任意数量的选项,而不必使用delayedexpansion
我将使用延迟扩展。出于好奇,您能否提供替代“调用”方法的链接?以上是关于批处理文件中的多行 IF 语句内的变量值未递增 [重复]的主要内容,如果未能解决你的问题,请参考以下文章