中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-13 20:42
47,812 主题排行 / 349,916 发帖 / 今日 0 篇 / 48,268 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]如何获得字符的字数和截取字符
可打印版本  2,723 / 11
第1楼 yangzhiyi 发表于 2007-03-17 09:39
中级用户 发帖 123 积分 261
[求助]如何获得字符的字数和截取字符
截取偶字数且最大为八个字数应该怎么做?
例如输入:一二三四五六七八九十 截取为:一二三四五六七八
例如输入:一二三四五六七八 截取为:一二三四五六七八
例如输入:一二三四五六七 截取为:一二三四五六
例如输入:一二三四五六 截取为:一二三四五六
例如输入:一二三四五 截取为:一二三四
例如输入:一二三四 截取为:一二三四
例如输入:一二三 截取为:一二
例如输入:一二 截取为:一二
例如输入:一 提示为:必须输入两个字以上
例如输入: 提示为:必须输入且两个字以上

截取和提示我都会做,只是不会得到字符个数
第2楼 qjbm 发表于 2007-03-17 11:40
初级用户 发帖 44 积分 125
对于在批处理中计算变量中字符个数需要编写一整套的"函数"来实现

特殊字符是批处理永远说不出的痛......

下面是一个拙例:



--------------------------------------------
呵呵:)~~

看样子果然是我把问题复杂化了,

还是做看客悄悄学习的比较少受批评:)

当时见此贴浏览次数超过70+无人回复,

且有讨论价值,沉了比较可惜才顶了一下,真是不好意思了...


-------------------------------------------
天天来,天天哭...........
歇段时间再说吧........

[ Last edited by qjbm on 2007-3-18 at 03:07 PM ]
第3楼 yangzhiyi 发表于 2007-03-18 03:50
中级用户 发帖 123 积分 261
能解释一下吗,看不明白
我运行后得到的是 27 啊,不对啊
我想做的只有中文,没特殊字符

再问下两个字符串连接起来如: 字符:一三 和字符:12 得到 一三12 ?
第4楼 bjsh 发表于 2007-03-18 04:38
银牌会员 发帖 621 积分 2,000
二楼的数字符的也太复杂了吧;


@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
第5楼 bjsh 发表于 2007-03-18 04:54
银牌会员 发帖 621 积分 2,000
回答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
第6楼 bjsh 发表于 2007-03-18 05:15
银牌会员 发帖 621 积分 2,000
对于特殊字符有这样的有趣的现象

例如

请输入:^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 ]
第7楼 xycoordinate 发表于 2007-03-18 05:50
中级用户 发帖 228 积分 493 来自 安徽
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变量前面截取,然后再判断吗???
第8楼 bjsh 发表于 2007-03-18 07:14
银牌会员 发帖 621 积分 2,000
可以啊;
set var=%var:~1%
第9楼 yangzhiyi 发表于 2007-03-18 09:06
中级用户 发帖 123 积分 261
谢谢解答
设置 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
第10楼 yangzhiyi 发表于 2007-03-18 09:18
中级用户 发帖 123 积分 261
一开始我写的是这个样,想想下太长,还是五楼的代码好。
@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 命令
第11楼 bjsh 发表于 2007-03-19 00:40
银牌会员 发帖 621 积分 2,000
Originally posted by yangzhiyi at 2007-3-17 08:06 PM:
谢谢解答

别客气;大家相互学习相互交流吗

设置 count 有什么用啊,没看明白,能解释详细点吗

设置count的作用是为了数变量中字符的个数;

利用set x=%count%/2*2 取偶数

利用 call echo %%var:~0,%x%%%来试现你要的效果;
第12楼 zh159 发表于 2007-03-19 01:56
金牌会员 发帖 1,467 积分 3,687
来个简化些的任意长字符
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023