中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-28 14:14
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 也出一题,娱乐娱乐:以子串为分隔符现实字符串的内容 查看 1,849 回复 25
16 发表于 2008-05-12 02:14 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
没注意 11 楼 HAT 兄的回帖,抱歉。。。
我的思路与你不一样,兴许你的代码更高效简洁,期待你的结果。。。
致精致简!
17 回复 15 楼 发表于 2008-05-12 02:20 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
Originally posted by zw19750516 at 2008-5-12 02:13:

@echo off&setlocal enabledelayedexpansion
set "str=bat1 ,1bbat;22 t2bat;3 ,3 3bat444babat"
:lp
if "%str:~,3%"=="bat" (
echo.!var!&set var= ...

不错,但还有个bug 若str结尾不是bat时,会丢失最后的字符。

[ Last edited by 26933062 on 2008-5-12 at 02:23 AM ]
致精致简!
18 发表于 2008-05-12 02:28 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-5-12 02:20:

不错,但还有个bug 若str结尾不是bat时,会丢失最后的字符。

[ Last edited by 26933062 on 2008-5-12 at 02:23 AM ]

再改:

@echo off&setlocal enabledelayedexpansion
set "str=1ba2bat1 ,1bbat;22 t2bat;3 ,3 3bat444babat9999"&set n=0
:lp
if "%str:~,3%"=="bat" (
set /a n+=1
set str=%str:~3%
) else (
set a=%str:~,1%&set var!n!=!var%n%!!a!
set str=%str:~1%
)
if defined str goto lp
for /l %%i in (0,1,!n!) do echo.!var%%i!
pause>nul


[ Last edited by zw19750516 on 2008-5-12 at 02:31 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
26933062 +5 2008-05-12 02:35
批处理之家新域名:www.bathome.net
19 发表于 2008-05-12 02:32 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
刚才粘错了,再测试看
批处理之家新域名:www.bathome.net
20 18 楼 发表于 2008-05-12 02:42 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
不错不错,提两个建议:
set a=%str:~,1%&set var!n!=!var%n%!!a!
可改为 set var!n!=!var%n%!%str:~,1%

加一个判断,可避免连续batbat时显示的空行。
for /l %%i in (0,1,!n!) do if defined var%%i echo.!var%%i!
致精致简!
21 发表于 2008-05-12 02:45 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
zw19750516 兄的方法比我的要简洁,学习了,我的还是放弃算了。
22 发表于 2008-05-12 02:46 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
20楼
高见,兄弟考虑问题比我全面啊。
批处理之家新域名:www.bathome.net
23 发表于 2008-05-12 12:31 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
其实开始我想的就是逐字判断 后来看可以删 我就用替换了 呵呵 考试老不及格哦 补上一个 算练习吧

@echo off&setlocal enabledelayedexpansion
set "str=bats afi/ ouy#ewbattnvbib atcghbat ret,yre;wih9 %bat"
:lp
if not "!str:~,3!"=="bat" (set var=!var!!str:~,1!) else (
if not "!var!"=="" echo !var!&set var=
set str=!str:~2!
)
set str=!str:~1!
if defined str goto lp
if not "!var!"=="" echo !var!
pause
简单!简单!再简单!
24 发表于 2008-05-12 13:42 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
贴一个我的,效率应该比逐字判断要快点吧?

@echo off
set "Str=bat1 ,1bbatbatbat;22 t2bat;3 ,3 3batbat444babat"
:loop
set "num=%str:*bat=%"
call set "var=a%%str:bat%num%=%%a"
if not "%var%"=="aa" echo.%var:~1,-1%
set "str=%num%"
if "%str%"=="%var:~1,-1%" set "num="
if defined num goto loop
pause
致精致简!
25 发表于 2008-05-12 13:55 ·  中国 北京 联通
社区乞丐
积分 -61
发帖 37
注册 2008-04-19 17:10
18年会员
UID 116329
性别 男
状态 离线
为何不能用替换呢?其实替换是很简单的啊

@echo off&setlocal
set "str=bat1 ,1bbat;22 t2bat;3 ,3 3bat444babat999999999"
for %%a in ("%str:bat=" "%") do echo/%%~a
26 发表于 2008-05-12 16:49 ·  中国 重庆 联通
中级用户
★★
积分 363
发帖 162
注册 2007-04-22 21:31
19年会员
UID 86104
性别 男
状态 离线
高手啊!!
论坛跳转: