Board logo

标题: [文本处理] 批处理bat脚本怎么求字符串长度? [打印本页]

作者: daxiang2    时间: 2024-12-29 15:49     标题: 批处理bat脚本怎么求字符串长度?

win11系统的bat脚本怎么计算字符串长度
作者: Batcher    时间: 2024-12-30 08:29

回复 1# daxiang2


批处理判断字符串长度
http://bbs.bathome.net/thread-1480-1-1.html

批处理用折半法计算字符串长度
http://bbs.bathome.net/thread-4219-1-1.html

批处理求字符串长度的表驱动算法
http://bbs.bathome.net/thread-5994-1-1.html

批处理字符串长度函数:二分搜索算法
http://bbs.bathome.net/thread-6677-1-1.html

集效率简短于一身的求字符串长度的批处理方法
http://bbs.bathome.net/thread-11799-1-1.html
作者: aloha20200628    时间: 2024-12-30 12:23

本帖最后由 aloha20200628 于 2024-12-30 12:33 编辑


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





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2