标题: [文本处理] [已解决]BAT获取字符串长度为何提示总字符长度为8190? [打印本页]
作者: lemoncn 时间: 2014-6-29 10:49 标题: [已解决]BAT获取字符串长度为何提示总字符长度为8190?
本帖最后由 lemoncn 于 2014-7-4 13:19 编辑
想用bat弄个动态获取字符串长度的小玩意,但单把函数块里的内容拿出来执行是没问题的,一整成函数动态获取就不行了。老提示总字符长度为8190。代码如下,请各位大神帮忙看下问题出在哪里。- echo off&setlocal ENABLEEXTENSIONS
- title 获取动态字符串长度
- set /p "str1=请键入第一个字符串:"
- set /p "str2=请键入第二个字符串:"
- set "srvnm=srv-%str1%-%str2%"
- echo 最终的字符串为:%srvnm%
- call:GetStrLen %srvnm%
- echo.&pause&goto:eof
-
- ::获取字符串长度
- :GetStrLen
- rem setlocal
- set str=%1
- set /a max=8190,min=0
- for /l %%a in (1,1,14) do (
- set /a "num=(max+min)/2"
- for /f "delims=" %%b in ("!num!") do if "!str:~%%b!" equ "" (set /a max=num) else set /a min=num
- )
- if "!str:~%num%!" neq "" set /a num+=1
- rem endlocal
- echo 经计算字符串%str%共有%num%个字符
- pause>nul
-
- :eof
- exit
- pause
复制代码
作者: xxpinqz 时间: 2014-6-29 13:11
- setlocal enabledelayedexpansion
复制代码
不是- setlocal ENABLEEXTENSIONS
复制代码
作者: apang 时间: 2014-6-29 14:18
这样试:- @echo off
- title 获取动态字符串长度
- set /p str1=请键入第一个字符串:
- set /p str2=请键入第二个字符串:
- set "str=srv-%str1%-%str2%"
- set /p "=最终的字符串为:%str%" <nul & echo,
- call:GetStrLen n
- echo 共 %n% 个字符
- pause&goto:eof
-
- ::获取字符串长度
- :GetStrLen
- setlocal enabledelayedexpansion
- set /a max=8190,min=0
- for /l %%a in (1,1,14) do (
- set /a "num=(max+min)/2"
- for /f "delims=" %%b in ("!num!") do (
- if "!str:~%%b!" equ "" (set /a max=num) else set /a min=num
- )
- )
- if "!str:~%num%!" neq "" set /a num+=1
- endlocal & set "%1=%num%"
复制代码
作者: lemoncn 时间: 2014-6-29 15:23
回复 3# apang
现在正常了 原来是命令调错了 谢谢大家
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |