中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何获得字符的字数和截取字符
作者:
标题: [求助]如何获得字符的字数和截取字符 上一主题 | 下一主题
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『楼 主』:  [求助]如何获得字符的字数和截取字符

截取偶字数且最大为八个字数应该怎么做? 例如输入:一二三四五六七八九十 截取为:一二三四五六七八 例如输入:一二三四五六七八 截取为:一二三四五六七八 例如输入:一二三四五六七 截取为:一二三四五六 例如输入:一二三四五六 截取为:一二三四五六 例如输入:一二三四五 截取为:一二三四 例如输入:一二三四 截取为:一二三四 例如输入:一二三 截取为:一二 例如输入:一二 截取为:一二 例如输入:一 提示为:必须输入两个字以上 例如输入: 提示为:必须输入且两个字以上 截取和提示我都会做,只是不会得到字符个数


2007-3-17 09:39
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qjbm
初级用户





积分 125
发帖 44
注册 2007-1-24
状态 离线
『第 2 楼』:  

对于在批处理中计算变量中字符个数需要编写一整套的"函数"来实现 特殊字符是批处理永远说不出的痛...... 下面是一个拙例:
@ECHO %DBG% OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET STR=一二三四五六七八九十1234,.FJSFJSFGDFG
CALL :JIS 0 1
GOTO :EOF

:JIS
FOR /L %%i IN (%1,1,%2) DO (
                            IF "TMP!STR:~%%i!"=="TMP" ECHO %%i 
                            IF "TMP!STR:~%%i!" NEQ "TMP" (
                                                          SET /A g=%%i+1,h=%%i+2
                                                          CALL :JIS !g! !h!
                                                          )
                            GOTO :EOF
                            )
-------------------------------------------- 呵呵:)~~ 看样子果然是我把问题复杂化了, 还是做看客悄悄学习的比较少受批评:) 当时见此贴浏览次数超过70+无人回复, 且有讨论价值,沉了比较可惜才顶了一下,真是不好意思了... ------------------------------------------- 天天来,天天哭........... 歇段时间再说吧........ [ Last edited by qjbm on 2007-3-18 at 03:07 PM ]


2007-3-17 11:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 3 楼』:  

能解释一下吗,看不明白 我运行后得到的是 27 啊,不对啊 我想做的只有中文,没特殊字符 再问下两个字符串连接起来如: 字符:一三 和字符:12 得到 一三12 ?


2007-3-18 03:50
查看资料  发短消息  网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 4 楼』:  

二楼的数字符的也太复杂了吧;
@echo off set /p var=请输入: set count=0 :loop if "%var%"=="" goto jump set var=%var:~0,-1% set /a count=%count%+1 goto loop :jump echo %count% pause


2007-3-18 04:38
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 5 楼』:  

回答lz的问题 对于任意长度的字符的代码
@echo off set /p var=请输入: set var_bak=%var% set count=0 :loop if "%var%"=="" goto jump set var=%var:~0,-1% set /a count=%count%+1 goto loop :jump set /a x=%count%/2*2 if "%x%"=="0" echo 必须输入两个字以上 && goto end call echo 截取为:%%var_bak:~0,%x%%% :end
对于lz要求长度的代码
@echo off set /p var=请输入: set var_bak=%var% set count=0 :loop if "%var%"=="" goto jump set var=%var:~0,-1% set /a count=%count%+1 goto loop :jump set /a x=%count%/2*2 if %x% GEQ 8 set x=8 if "%x%"=="0" echo 必须输入两个字以上 && goto end call echo 截取为:%%var_bak:~0,%x%%% :end
两个的差别只有
if %x% GEQ 8 set x=8


2007-3-18 04:54
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 6 楼』:  

对于特殊字符有这样的有趣的现象 例如 请输入:^1245 4 这里是数的字符个数;前面加了^后面居然数成了4 截取为:1245 请输入:1234567&89。 这里中间加了个&后面出了这么一大片错 '89' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 '8' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 8 这里是数的字符个数,显然&被算入在内了 截取为:1234567 请输入:1234567& 8 截取为:1234567 本来程序是输出偶数个的输出了7个;也就是说&算"隐藏"了 [ Last edited by bjsh on 2007-3-17 at 04:16 PM ]


2007-3-18 05:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 7 楼』:  

Originally posted by bjsh at 2007-3-17 15:38: 二楼的数字符的也太复杂了吧; @echo off set /p var=请输入: set count=0 :loop if "%var%"=="" ( echo %count% goto :eof ) set var=%var:~0,-1% set /a count+=1 goto loop pause
的确比2楼的容易理解! 我想问: 能从var变量前面截取,然后再判断吗???


2007-3-18 05:50
查看资料  发送邮件  发短消息  网志  OICQ (226308607)  编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 8 楼』:  

可以啊; set var=%var:~1%


2007-3-18 07:14
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 9 楼』:  

谢谢解答 设置 count 有什么用啊,没看明白,能解释详细点吗 @echo off set /p var=请输入: set var_bak=%var% set count=0 :loop if "%var%"=="" goto jump set var=%var:~0,-1% set /a count=%count%+1 goto loop :jump set /a x=%count%/2*2 if %x% GEQ 8 set x=8 if "%x%"=="0" echo 必须输入两个字以上 && goto end call echo 截取为:%%var_bak:~0,%x%%% :end


2007-3-18 09:06
查看资料  发短消息  网志   编辑帖子  回复  引用回复
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 10 楼』:  

一开始我写的是这个样,想想下太长,还是五楼的代码好。 @echo off :start set var= set /p var=请输入: :0 if "%var%"=="" echo 不能为空且要两个字以上 & pause >nul & goto start set var=%var:~0,4% :1 set var2=%var:~0,1% if "%var%"=="%var2%" echo 必须输入两个字以上 & pause >nul & goto start :2 set var2=%var:~0,2% if not "%var%"=="%var2%" goto 3 set mane=%var2% goto end :3 set var2=%var:~0,3% if not "%var%"=="%var2%" goto 4 set var2=%var:~0,2% set mane=%var2% goto end :4 set var2=%var:~0,4% if not "%var%"=="%var2%" goto 5 set mane=%var2% goto end :5 echo 输入参数异常 pause goto start :end echo %mane% 下午再写成这样, @echo off :start set var= set /p var=请输入两个或四个中文字(会自动截取成最大四个字的偶字数): if "%var%"=="" echo 不能为空且要两个字以上 & pause >nul & goto start set var=%var:~0,4% echo %var% | find "一二三" >nul && echo 保留字符不允许使用 && pause >nul && goto start set var1=%var%一二三 set var2=%var1:~1,3% if "%var2%"=="一二三" echo 必须输入两个字以上 & pause >nul & goto start set var=%var:~0,4% set var2=%var1:~0,4% if "%var%"=="%var2%" set mane=%var2% & goto end set var=%var:~0,2% set var2=%var1:~0,2% if "%var%"=="%var2%" set mane=%var2% & goto end :end echo %mane% 没办法我完全不会 for 命令


2007-3-18 09:18
查看资料  发短消息  网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 11 楼』:  

Originally posted by yangzhiyi at 2007-3-17 08:06 PM: 谢谢解答
别客气;大家相互学习相互交流吗
设置 count 有什么用啊,没看明白,能解释详细点吗
设置count的作用是为了数变量中字符的个数; 利用set x=%count%/2*2 取偶数 利用 call echo %%var:~0,%x%%%来试现你要的效果;


2007-3-19 00:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  

来个简化些的任意长字符
@echo off
set var=
set /p var=请输入: 
set var_bak=%var%
set count=0

:loop
if not "%var%"=="" set var=%var:~1%&set /a count+=1&goto loop

set /a count=%count%/2*2
if %count% GTR 1 (call echo 截取为: %%var_bak:~0,%count%%%) else echo 必须输入两个字以上
pause
exit


2007-3-19 01:56
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: