找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 219|回复: 14

[求助] 批处理bat如何判断字符串长度

[复制链接]
发表于 昨天 09:25 | 显示全部楼层 |阅读模式

请教热心网友,如何使用批处理bat判断字符串长度,
特别是字符串带有【空格】、【“】、【】(即两个“字符连在一起)等特殊情况时。

发表于 昨天 09:32 | 显示全部楼层
批处理本身处理复杂字符串比较麻烦,推荐调用 PowerShell 来获取字符串长度,可以轻松处理特殊字符。使用 powershell 判断字符串长度(推荐)

  1. echo off
  2. setlocal

  3. :: 示例字符串,可以包含空格、引号、连续引号等
  4. set "input=Hello "World""

  5. :: 调用 PowerShell 获取字符串长度
  6. for /f "usebackq" %%a in (`powershell -command "$env:input.Length"`) do set "len=%%a"

  7. echo 字符串长度为: %len%

  8. endlocal
复制代码

说明:
  • set "input=Hello "World"":即使包含特殊字符,用 set "变量=..." 格式是安全的。
  • powershell -command "$env:input.Length":读取环境变量 input 的内容,并返回其长度。
  • for /f 用来捕获 PowerShell 的输出。


如果坚持使用纯批处理虽然可以实现,但处理引号、空格会变得非常复杂,容易出错,不推荐用于实际项目。

回复

使用道具 举报

发表于 昨天 09:47 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 昨天 10:39 | 显示全部楼层
2楼说得很全面了

如果一定要用纯批处理,可以试下这个函数,对于包含空格和双引号的字符串,结果是正确的
来源于互联网,相当精巧

@echo off
set "input=Hello "World""
call :getstrlen input len
if defined len echo -%len%-
pause
exit

REM 获取变量中字符串长度,存入变量
REM call :getstrlen str len
:getstrlen
if "%~1" equ "" goto :eof
if "%~2" equ "" goto :eof
setlocal enabledelayedexpansion
set "$=!%1!#"
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 getstrlenok)
set "s=!s!fedcba9876543210" &set/a "len+=0x!s:~16,1!"
:getstrlenok
endlocal&set/a "%2=%len%"&goto:eof
回复

使用道具 举报

发表于 昨天 11:13 | 显示全部楼层
这东西用AI编写一个可以试试
回复

使用道具 举报

发表于 昨天 11:19 | 显示全部楼层

感谢分享,快乐分享,分享快乐。
回复

使用道具 举报

发表于 昨天 11:21 | 显示全部楼层
感谢论坛速度提升
回复

使用道具 举报

发表于 昨天 11:22 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 昨天 12:09 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 昨天 12:29 | 显示全部楼层
2楼威武!
回复

使用道具 举报

发表于 昨天 13:39 来自手机 | 显示全部楼层
对于用于长度对其的长度计算,批处理有先天劣势,特别是中英文半角全角混排情况,dpinfo中采用的办法是写入临时文件,根据文件大小计算。或者省事点用tab键对齐。
回复

使用道具 举报

发表于 昨天 13:40 | 显示全部楼层
支持2#4#热心坛友
回复

使用道具 举报

发表于 昨天 14:14 | 显示全部楼层
学习下了
回复

使用道具 举报

发表于 昨天 15:20 | 显示全部楼层
如果只是单纯的要长度,那就直接计算就好了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 示例字符串,可以包含空格、引号、连续引号等
  4. set "str=Hello "World""""

  5. :count
  6. if not "!str:~%n%,1!"=="" set /a n+=1&goto :count
  7. echo;%n%
  8. pause&exit
复制代码


回复

使用道具 举报

发表于 昨天 22:36 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-3-17 01:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表