看几个参考帖可能会花眼...批处的这个经典话题时至今日也许可简括如下(仅供参考)》
一。纯批处的解法中至为经典的版本就是源自2008年 https://www.dostips.com 分享的老帖,后来被简化的常用版本及其用法示例类似如下,其中的核心子过程 :strLen 简略了命令行参数的防空处理- @echo off &setlocal
- set "str=字符串长度&123"
- call :strLen str slen
- echo,%slen%
- pause &exit/b
- :strLen // %1=字符串变量名 %2=字符串长度变量名
- setlocal enabledelayedexpansion &set "_s=!%~1!" &set "_l=1"
- for %%p in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!_s:~%%p,1!" neq "" set/a "_l+=%%p" &set "_s=!_s:~%%p!")
- endlocal &set "%~2=%_l%" &exit/b
复制代码
二。如果系统已预装了 powershell 甚至 python 或下载了 gawk.exe (可直接从本坛下载即用),其更简洁的解法版本如下- set "str=字符串长度&123"
-
- :: Powershell版本
- for /f "delims=" %%v in ('powershell " '%str%'.length" ') do echo,%%v
-
- :: Python版本
- for /f "delims=" %%v in ('Python -c "print(len('%str%'))" ') do echo,%%v
-
- :: gawk版本 // 为防cmd代码转义须用双引号包裹目标字符串故导致字符串计算长度+2
- for /f "delims=" %%v in ('echo,"%str%"^|gawk "{print length()}" ') do set/a "v=%%v-2"
- echo,%v%
-
- pause&exit/b
复制代码