中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-09 16:42
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助:如何实现自动计算字符串的长度 查看 1,132 回复 10
楼 主 求助:如何实现自动计算字符串的长度 发表于 2008-09-10 21:39 ·  中国 四川 成都 教育网
初级用户
积分 30
发帖 16
注册 2008-09-05 22:50
17年会员
UID 124914
性别 男
状态 离线
输入一串字符,就可自动计算字符串的长度,主要是计算字符串长度的那段命令想不出,哪位高人给详细分析一下,先谢谢各位了!
2 发表于 2008-09-10 21:52 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
1.字符截取和移位
2.findstr /o
3.如果全是半角,可以写入文件,读取%%~za
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
3 发表于 2008-09-10 21:53 ·  中国 江苏 苏州 中移铁通
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
这个方法很多,

@echo off
set/p l=please input a string:
:lp
set /a n+=1
set l=%l:~1%
if defined l goto :lp
echo string.len is %n%
pause
4 发表于 2008-09-10 21:53 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
set /p str=请输入:
set length=0
for /f "skip=1 delims=:" %%a in ('^(echo "%str%"^&echo.^)^|findstr /o ".*"') do set /a length=%%a-5
echo %length%
5 发表于 2008-09-10 21:55 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
set /p str=请输入:
set length=0
echo "%str%">"%temp%\strlen.txt"
for %%a in ("%temp%\strlen.txt") do set length=%%~za
set /a length=length-4
echo %length%
6 发表于 2008-09-10 22:11 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
vbs:
wsh.echo len(inputbox(""))
7 发表于 2008-09-10 22:54 ·  中国 四川 成都 教育网
初级用户
积分 30
发帖 16
注册 2008-09-05 22:50
17年会员
UID 124914
性别 男
状态 离线
先谢谢楼上的各位
找到一个别人写的批处理
@echo off
set /p str=请输入任意长度的字符串:
echo 你输入了字符串:"%str%"
call :stringlenth "%str%" num
echo 字符串长度为:%num%
pause
exit

:StringLenth
::---------字符串长度计算子程序
::---------参数%1为字符串(如有空格,请用引号括起来)
::---------参数%2为返回变量名称,不能含空格或特殊字符
::@echo off
set theString=%~1
if not defined theString goto :eof
set Return=0

:StringLenth_continue
set /a Return+=1
set thestring=%thestring:~0,-1%
if defined thestring goto StringLenth_continue
if not "%2"=="" set %2=%Return%
goto :eof
关于计算字符长度的那段有几个地方不懂,就是set theString=%~1
if not defined theString goto :eof
set Return=0
这一部分有点不太懂set theString=%~1等号右边是什么意思?
8 发表于 2008-09-10 22:59 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
for /?

%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
9 发表于 2008-09-10 23:14 ·  中国 四川 成都 教育网
初级用户
积分 30
发帖 16
注册 2008-09-05 22:50
17年会员
UID 124914
性别 男
状态 离线
这是for命令里的用法吧,可那条命令是set theString=%~1,而且右边的变量是数字而不是字符,这样也可以吗?
10 发表于 2008-09-11 10:08 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
call :stringlenth "%str%" num
调用stringlenth的时候,%1代表第一个参数,也就是"%str%"
11 发表于 2008-09-11 20:56 ·  中国 四川 成都 教育网
初级用户
积分 30
发帖 16
注册 2008-09-05 22:50
17年会员
UID 124914
性别 男
状态 离线
明白了,谢谢HAT的指导,谢谢楼上各位的回复
论坛跳转: