无忧启动论坛

标题: 批处理系列7:计算字符串长度 [打印本页]

作者: 青青草    时间: 2021-7-18 14:51
标题: 批处理系列7:计算字符串长度
本帖最后由 青青草 于 2021-7-18 15:03 编辑
  1. :Length
  2. setlocal enabledelayedexpansion
  3. set "$=!%1!#"
  4. set "len="&for %%a in (4096 2048 1024 256 128 64 32 16 8 4 2 1) do (if "!$:~%%a,1!" NEQ "" set/a len+=%%a&set "$=!$:~%%a!" &if "!$:~1!"=="" goto ok)
  5. set "s=!s!fedcba9876543210" &set/a "len+=0x!s:~16,1!"
  6. :ok
  7. endlocal&set/a "%2=%len%"&goto:eof
  8. pause
复制代码
调用
  1. call :Length %1 %2
  2. rem 第一个参数为字符串,第二个参数为字符串长度。
复制代码




作者: chenfine    时间: 2021-7-18 16:27
ok
作者: dx163    时间: 2021-7-18 20:36
不会用也不会玩
作者: 青青草    时间: 2021-7-18 21:40
dx163 发表于 2021-7-18 20:36
不会用也不会玩

多学习,慢慢就会了。
作者: dos时代菜鸟    时间: 2021-7-19 08:42
华罗庚二分法。
作者: 青青草    时间: 2021-7-19 10:21
dos时代菜鸟 发表于 2021-7-19 08:42
华罗庚二分法。


作者: 青青草    时间: 2021-7-19 10:22
chenfine 发表于 2021-7-18 16:27
ok


作者: dkzzlf    时间: 2021-7-19 10:46
感谢分享
作者: 青青草    时间: 2021-7-19 11:04
dkzzlf 发表于 2021-7-19 10:46
感谢分享


作者: nttwqz    时间: 2021-7-19 15:46
不妨研究下汉字、标点、全角字符等长度为2才能和英文对齐的计算方法。
作者: 青青草    时间: 2021-7-19 19:12
nttwqz 发表于 2021-7-19 15:46
不妨研究下汉字、标点、全角字符等长度为2才能和英文对齐的计算方法。

你的意思是?
作者: dos时代菜鸟    时间: 2021-7-19 21:44
青青草 发表于 2021-7-19 19:12
你的意思是?

中文简体环境下的  cmd 把一个汉字 识别为一个字符,而实际上占用两个字符的显示位置。
作者: nttwqz    时间: 2021-7-19 21:48
青青草 发表于 2021-7-19 19:12
你的意思是?

比如下面两行,按一般长度计算方法,长度均为6
你的意思是?
abcde?

但是cmd的默认字体a无法对齐,即使第一列都是6。
你的意思是? a
abcde? a

简言之,中文字符宽和英文字符宽不相同,安装相同的方法判断,虽然长度相同,但是无法用于对齐
作者: plusv    时间: 2021-7-20 07:24
nttwqz 发表于 2021-7-19 21:48
比如下面两行,按一般长度计算方法,长度均为6
你的意思是?
abcde?

夹杂 中/英文 批处理不好搞,
写程序会简便些,
将文字 /靠左/靠中/靠右 对齐.
作者: 青青草    时间: 2021-7-20 18:12
nttwqz 发表于 2021-7-19 21:48
比如下面两行,按一般长度计算方法,长度均为6
你的意思是?
abcde?

中英文混编,批处理很难搞。
作者: nianyueriPE    时间: 2021-7-24 15:22

感谢分享
作者: 青青草    时间: 2021-7-25 10:55
dkzzlf 发表于 2021-7-19 10:46
感谢分享


作者: 青青草    时间: 2021-7-25 10:56
nianyueriPE 发表于 2021-7-24 15:22
感谢分享


作者: 610644034    时间: 2021-8-6 18:30
本帖最后由 610644034 于 2021-8-6 18:44 编辑

批处理想要 字符对齐 已经没有什么难度! 本人喜欢中文 批处理 , 发出来给大家参考一下(字符串长度只限制1000 范围 需要的可任意修改):

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:按占位数修正一个字符串的长度
rem :按占位数修正一个字符串的长度 "InOut_ptr"           "In"
rem :参数列表                     输入输出字符串变量名  占位数
if "" EQU "%~1" goto :eof
if "" EQU "!%~1!" goto :eof
if "" EQU "%~2" set "%~1=" & goto :eof
( set /a 按占位数修正一个字符串的长度_占位数=%~2 + 0 )>nul 2>nul
( if 0 EQU !按占位数修正一个字符串的长度_占位数! set "%~1=" & goto :eof )>nul 2>nul
set "按占位数修正一个字符串的长度_输出字符串="
for /l %%i in ( 0 1 999 ) do (
   if "" EQU "!%~1:~%%i,1!" (
      rem echo ************** 1
      set "按占位数修正一个字符串的长度_输出字符串=!%~1:~0,%%i!"
      goto :按占位数修正一个字符串的长度_001
   )
   if !按占位数修正一个字符串的长度_占位数! LEQ 0 (
      set "按占位数修正一个字符串的长度_输出字符串=!%~1:~0,%%i!"
      rem echo ************** 2
      goto :按占位数修正一个字符串的长度_001
   )
   set "按占位数修正一个字符串的长度_临时字符=!%~1:~%%i,1!"
   if !按占位数修正一个字符串的长度_临时字符! GTR Z set /a 按占位数修正一个字符串的长度_占位数=!按占位数修正一个字符串的长度_占位数! - 2
   if !按占位数修正一个字符串的长度_临时字符! LEQ Z set /a 按占位数修正一个字符串的长度_占位数=!按占位数修正一个字符串的长度_占位数! - 1
)
:按占位数修正一个字符串的长度_001
rem echo ************** -- !按占位数修正一个字符串的长度_占位数!
if -1 EQU !按占位数修正一个字符串的长度_占位数! set "按占位数修正一个字符串的长度_输出字符串=!按占位数修正一个字符串的长度_输出字符串:~0,-1!?"
if 0 LSS !按占位数修正一个字符串的长度_占位数! (
   for /l %%i in ( 1 1 !按占位数修正一个字符串的长度_占位数! ) do set "按占位数修正一个字符串的长度_输出字符串=!按占位数修正一个字符串的长度_输出字符串! "
)
if 0 EQU !按占位数修正一个字符串的长度_占位数! set "按占位数修正一个字符串的长度_输出字符串=!%~1!"
set "%~1=!按占位数修正一个字符串的长度_输出字符串!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


看看对齐效果就是这样的...................


捕获.PNG (44.38 KB, 下载次数: 155)

捕获.PNG





欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3