大概问题是,为什么在for循环中,明明写对了 call :l_lable ,在循环中却并未调用到:l_lable 这个标签呢,循环肯定是进行了的。
是这样的,我写了一个批处理strstr.bat,用于查找子字符串的位置,输入三个参数,一个是字符串,一个是要查找的子字符串,一个是是否忽略大小写,用变量cexer输出查找到的子字符串位置。批处理如下:- :l_strstr
- @echo off
- @set _string=%~1
- @set _substr=%~2
- @set _icase=%~3
-
- @call strlen %_string%
- @set _strlen=%cexer%
-
- @call strlen %_substr%
- @set _sublen=%cexer%
-
- @if "%_icase%" equ "" @goto :l_loop
- @if %_icase% equ 0 @goto :l_loop
-
- :l_upper
- @call strup %_string%
- @set _string=%cexer%
-
- @call strup %_substr%
- @set _substr=%cexer%
-
-
- :l_loop
- @set /a _maxidx=%_strlen%-%_sublen%
- @for /l %%i in (0,1,%_maxidx%) do (
- @call echo %%_string:~%%i,%_sublen%%% %%i
- @call :l_check %%_string:~%%i,%_sublen%%% %%i
- )
-
- @set cexer=-1
- @goto :l_return
-
-
- :l_check
- if "%1" equ "%_substr%" (
- @set cexer=%2
- @goto :l_return
- )
- @goto :eof
-
-
- :l_return
- @echo on
- @goto :eof
复制代码 其中的 strlen.bat 是我写的一个批处理用于计算字符串的长度,用cexer变量返回(这个批处理是没问题的)
写了一个test.bat测试strstr.bat:- @set string="012345ABC90"
- @call strstr %string% "ab"
- @echo %cexer%
- @pause
复制代码 发现批处理strstr中,for循环中的语句- @call :l_check %%_string:~%%i,%_sublen%%% %%i
复制代码 并未调用子标签 :l_check,就好像直接跳过了这一句似的。
如果把test.bat为如下(给strstr.bat调用增加一个参数,忽略大小写)- @set string="012345ABC90"
- @call strstr %string% "ab" 1
- @echo %cexer%
- @pause
复制代码 则循环的最后三次call会成功调用:l_check。
很奇怪,为什么明明写对了 call :l_check ,却调用不到标签呢?
[ 本帖最后由 neohost 于 2011-1-17 17:44 编辑 ] |