Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 批处理文件中的多行IF语句中的变量值未递增 我正在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 Statement_Batch File_Command Prompt - Fatal编程技术网

If statement 批处理文件中的多行IF语句中的变量值未递增 我正在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 statement 批处理文件中的多行IF语句中的变量值未递增 我正在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-statement,batch-file,command-prompt,If Statement,Batch File,Command Prompt,如何更新if语句中的somevar? 谢谢。您正遭受着缺少延迟扩展的痛苦 @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 in

如何更新if语句中的somevar?


谢谢。

您正遭受着缺少
延迟扩展的痛苦

@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%

通过从
cmd

然而,我没有投票以重复方式关闭的原因也是为了突出显示错误的
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有多个语句要执行。delayedexpansion看起来很有用。但我认为你在写“你不需要带括号的块,因此不需要延迟扩展”时误解了是的。我完全按照要求回答了你的问题。第二部分仅供参考。使用它,不要使用它。谢谢顺便说一句,我试了一件对我的案子有效的事情。我在多行if之前添加了“if”%match\u string%=“match”set/a somevar+=1“以使用更新的值。那么现在您有2个
if
语句了吗?同样的案子?这有点低效,不是吗?您有许多选项要实现,因此如果您不喜欢使用
delayedexpansion
,请使用
call
操作块,然后您可以添加任意多的选项,而无需使用
delayedexpansion
我将使用delayedexpansion。出于好奇,你能给出替代“调用”方法的链接吗?这个问题的下一个投票人-你能把que分数设为零吗?因为我试图解释我的问题,并编写了一个示例代码来验证。我可以删除这个问题,但已经回答的专家将不知所措。而且,它可以在将来帮助别人。谢谢