中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助:如何实现自动计算字符串的长度
作者:
标题: 求助:如何实现自动计算字符串的长度 上一主题 | 下一主题
longshou
初级用户





积分 30
发帖 16
注册 2008-9-5
状态 离线
『楼 主』:  求助:如何实现自动计算字符串的长度

输入一串字符,就可自动计算字符串的长度,主要是计算字符串长度的那段命令想不出,哪位高人给详细分析一下,先谢谢各位了!

2008-9-10 21:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 2 楼』:  

1.字符截取和移位
2.findstr /o
3.如果全是半角,可以写入文件,读取%%~za



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-9-10 21:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 3 楼』:  

这个方法很多,
@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


2008-9-10 21:53
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  


@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%




2008-9-10 21:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  


@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%




2008-9-10 21:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 6 楼』:  

vbs:
wsh.echo len(inputbox(""))


2008-9-10 22:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
longshou
初级用户





积分 30
发帖 16
注册 2008-9-5
状态 离线
『第 7 楼』:  

先谢谢楼上的各位
找到一个别人写的批处理
@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等号右边是什么意思?

2008-9-10 22:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 8 楼』:  

for /?

  Quote:
   %~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





2008-9-10 22:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
longshou
初级用户





积分 30
发帖 16
注册 2008-9-5
状态 离线
『第 9 楼』:  

这是for命令里的用法吧,可那条命令是set theString=%~1,而且右边的变量是数字而不是字符,这样也可以吗?

2008-9-10 23:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  

call :stringlenth "%str%" num
调用stringlenth的时候,%1代表第一个参数,也就是"%str%"



2008-9-11 10:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
longshou
初级用户





积分 30
发帖 16
注册 2008-9-5
状态 离线
『第 11 楼』:  

明白了,谢谢HAT的指导,谢谢楼上各位的回复

2008-9-11 20:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: