本帖最后由 aloha20200628 于 2024-12-30 12:33 编辑
看几个参考帖可能会花眼...批处的这个经典话题时至今日也许可简括如下(仅供参考)》
一。纯批处的解法中至为经典的版本就是源自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/bCOPY |
二。如果系统已预装了 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/bCOPY |
|