批处理for循环内外同样的if语句判断语句执行效果不一样,请大侠帮忙看下。
@echooff&setlocalenabledelayedexpansionremo.hex文件中第55行内容为:":047FD40000000000A9"set"sr...
@echo off&setlocal enabledelayedexpansion
rem o.hex文件中第55行内容为:":047FD40000000000A9"
set "src_file=o.hex"
set "z=047FD4"
for /f "delims=" %%i in (%src_file%) do (
set /a n+=1
set var=%%i
if !n!==55 set var1=%%i
set newStr1=!var1:~1,6!
rem if %newSTr1% EQU %z% (
rem echo ok1111
rem )
)
if %newSTr1% EQU %z% (
echo ok2222
)
pause>nul
for循环中的if %newSTr1% EQU %z% ()语句不执行打印ok1111,但是for循环外面的同样的语句再注释(rem)掉前面的for中的if判断后则能正确打印ok2222,这是为什么呢?for循环对if判断的条件有限制吗?
for循环if判断语句不注释的情况下,则运行时不打印ok1111,只提示"此时不应有 047FD4",并且也不会打印ok2222,求解 展开
rem o.hex文件中第55行内容为:":047FD40000000000A9"
set "src_file=o.hex"
set "z=047FD4"
for /f "delims=" %%i in (%src_file%) do (
set /a n+=1
set var=%%i
if !n!==55 set var1=%%i
set newStr1=!var1:~1,6!
rem if %newSTr1% EQU %z% (
rem echo ok1111
rem )
)
if %newSTr1% EQU %z% (
echo ok2222
)
pause>nul
for循环中的if %newSTr1% EQU %z% ()语句不执行打印ok1111,但是for循环外面的同样的语句再注释(rem)掉前面的for中的if判断后则能正确打印ok2222,这是为什么呢?for循环对if判断的条件有限制吗?
for循环if判断语句不注释的情况下,则运行时不打印ok1111,只提示"此时不应有 047FD4",并且也不会打印ok2222,求解 展开
1个回答
2015-01-25
展开全部
晕,你开启了变量延迟。而一部分知道用叹号 !来引用变量。
结果,又变成了 百分号 % 如下:
@echo off&setlocal enabledelayedexpansion
set "src_file=o.hex"
set "z=047FD4"
for /f "delims=" %%i in (%src_file%) do (
set /a n+=1
set var=%%i
if !n!==55 set var1=%%i
set newStr1=!var1:~1,6!
if !newSTr1! EQU !z! echo ok1111)
pause>nul
更多追问追答
追问
不是很懂变量延迟,还有叹号和%号受变量延迟的影响,求进一步详解。
追答
在for 命令之内,如果要引用 在for中定义的变量,要用叹号 !。
如果变量延迟,不开启,无法取得变量值。
而开启变量延迟后。在 for 之外 。!和% 都可以用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询