写了一个关于获取字符串长度和字节数的函数。需要开启延迟变量。为了方便,把变量延迟的开启放到了标签下...
详见代码:
- @echo off
- set "str=haoren就是"
- call :GetStrLenAndStrB %str% strlen bytes
- echo %strlen% %bytes%
- pause>nul
- :GetStrLenAndStrB Str strlen bytes
- Rem '///////////////日期截取函数///////////////////////////////
- Rem 'code by youxi01@bbs.bathome.net 适用于Winxp;
- Rem '===============使用方法===================================
- Rem '1、要调用本段函数,先将标签下:GetStrLenAndStrB所有内容拷贝
- Rem '到对应批处理的pause段下。
- Rem '2、参数解析:Str为要获取字节数的字符串,strlen用来保存字符串
- Rem '长度,bytes用来保存字节
- Rem '3、用法示例::GetStrLenAndStrB "hao人" strlen bytes
- Rem '则,strlen的结果就为:4,bytes中的结果即为:5
- Rem '4、注意:本函数不能识别全角半角;
- Rem '==========================================================
- set "var=%~1"
- for /l %%i in (0 1 200) do (
- setlocal enabledelayedexpansion
- set "var_=!var:~%%i,1!"
- if "!var_!"=="" endlocal &goto :eof
- if !var_! gtr Z set /a %3+=2 else set /a %3+=1
- set /a %2+=1
- )
复制代码
以上代码看起来没错,但是运行的时候,竟然显示的strlen 、bytes没有被定义过,后来经错误排查,找出是延迟变量的问题,后来把代码改为:
- @echo off
- set "str=haoren就是"
- call :GetStrLenAndStrB %str% strlen bytes
- echo %strlen% %bytes%
- pause>nul
- :GetStrLenAndStrB Str strlen bytes
- Rem '///////////////日期截取函数///////////////////////////////
- Rem 'code by youxi01@bbs.bathome.net 适用于Winxp;
- Rem '===============使用方法===================================
- Rem '1、要调用本段函数,先将标签下:GetStrLenAndStrB所有内容拷贝
- Rem '到对应批处理的pause段下。
- Rem '2、参数解析:Str为要获取字节数的字符串,strlen用来保存字符串
- Rem '长度,bytes用来保存字节
- Rem '3、用法示例::GetStrLenAndStrB "hao人" strlen bytes
- Rem '则,strlen的结果就为:4,bytes中的结果即为:5
- Rem '4、注意:本函数不能识别全角半角;
- Rem '==========================================================
- set "var=%~1"
- for /l %%i in (0 1 200) do (
- setlocal enabledelayedexpansion
- set "var_=!var:~%%i,1!"
- if "!var_!"=="" goto :eof
- if !var_! gtr Z (endlocal & set /a %3+=2) else endlocal & set /a %3+=1
- set /a %2+=1
- )
复制代码
问题解决。
但是其中的道理却还是没有弄明白,希各方朋友不吝赐教啊! |