![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-01 01:38 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]字串替换请指教 |
| 可打印版本 1,872 / 18 |
| 第1楼 sady2009 | 发表于 2009-04-14 20:11 |
| 初级用户 发帖 60 积分 58 | |
|
[已结]字串替换请指教 a.txt 文件内容如下,以下是一行,很长.里面随机的位置出现gif 链接。一行中大概多的有20多个这样的gif图片,数量不定。
李云龙已和张部长纠缠了{http://www.abc.com/image/234652.gif}多小时了,不为别的,就{http://www.abc.com/image/gif1/144652.gif}想多弄点“边区造”手榴弹。{http://www.abc.com/image/gif2/964673.gif}八路军太行兵工厂的土产。平心而论,李云龙一点儿也不认为这种土造手榴弹有什么好, 比起日军的那种柠檬式手榴弹差得太远啦,“边区造”的铸铁弹体质量太差,爆炸后有时只炸成两半,弹片的杀伤效果极糟糕,这种玩艺儿在战斗中常耽误事。可话又说回来了,就这种 “边区造”也不可能敞开了供应部队,用李云龙的话说:能拔脓就{http://www.abc.com/image/gif1/144652.gif}好膏药,有总比没有强 。 b.txt内容: 将gif下载分析出来的实际文字 两个 234652.gif 是 144652.gif 这是 964673.gif 请求:将a.txt中的gif链接 替换为b文件中的实际文字。要求不改变a.txt原有结构(不加换行符)。 看似很简单,虽然我也实现了,但采用的是很笨的方法。定义了30个变量才搞定,有没有更好的方法。查找了很多p.没有找到方法。(有很多列,列的个数也是随机的 ) [ Last edited by sady2009 on 2009-4-14 at 21:24 ] |
|
| 第2楼 netbenton | 发表于 2009-04-14 20:19 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
链接的地址一样,只是文件名不一样是吗?
|
|
| 第3楼 sady2009 | 发表于 2009-04-14 20:27 |
| 初级用户 发帖 60 积分 58 | |
|
回老大。链接地址不全一样。
http://www.abc.com/image/gif1/xxxxxx.img http://www.abc.com/image/gif2/xxxxxx.img http://www.abc.com/image/gif3/xxxxxx.img 类似如此, 但 xxxxxx.img在b.txt中都可以找到的. xxxxxx固定的,6个随机数字 [ Last edited by sady2009 on 2009-4-14 at 20:32 ] |
|
| 第4楼 netbenton | 发表于 2009-04-14 21:11 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
好了 @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
set n=0 for /f "tokens=1,2" %%a in (b.txt) do (set/a n+=1&set #!n!=%%a&set $%%b=$!n!&set $!n!=%%b) (for /f "delims=" %%a in (a.txt) do (set "str=%%a" set var=!str:{= ! call :sub !var:}= ! for /l %%i in (1,1,%n%) do (call set "str=%%str:{!$%%i!}=!#%%i!%%") echo.!str! ))>c.txt type c.txt pause goto :eof :sub if "%~1"=="" goto :eof if /i "%~x1"==".gif" (set "!$%~nx1!=%1") shift goto :sub |
|
| 第5楼 sady2009 | 发表于 2009-04-14 21:23 |
| 初级用户 发帖 60 积分 58 | |
|
老大的代码真是神奇.下来学习学习.
自以为自己不是菜鸟,但看了您的代码,我又回到了菜鸟的行列. [ Last edited by sady2009 on 2009-4-14 at 21:39 ] |
|
| 第6楼 tireless | 发表于 2009-04-14 22:16 |
| 银牌会员 发帖 1,122 积分 2,025 | |
| 第7楼 sady2009 | 发表于 2009-04-15 00:49 |
| 初级用户 发帖 60 积分 58 | |
Originally posted by tireless at 2009-4-14 22:16: |
|
| 第8楼 netbenton | 发表于 2009-04-15 00:53 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
6楼的才方法才叫绝了。
替换加入标志并分段,判断把以\@.@为尾的段剔除,并把剩下的连接。 用得好巧呀,速度也快,开眼界了! 通常文件不文件不止一行,加个for就可以解决多行的问题了, [ Last edited by netbenton on 2009-4-14 at 22:57 ] |
|
| 第9楼 tireless | 发表于 2009-04-15 01:11 |
| 银牌会员 发帖 1,122 积分 2,025 | |
| 第10楼 sady2009 | 发表于 2009-04-15 01:30 |
| 初级用户 发帖 60 积分 58 | |
|
真是太厉害了,文件名的扩展也能这样用。
各位老大的批处理真是出神入化。 |
|
| 第11楼 netbenton | 发表于 2009-04-15 07:28 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
取长补短为提速 [ Last edited by netbenton on 2009-4-15 at 23:11 ] |
|
| 第12楼 sady2009 | 发表于 2009-04-15 08:54 |
| 初级用户 发帖 60 积分 58 | |
|
非常感谢, 速度感觉快一些。
但美中不足是会丢失一些空格,当 http前面是一个空格的时候。 |
|
| 第13楼 freeants001 | 发表于 2009-04-15 10:04 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
Originally posted by tireless at 2009-4-14 22:16: |
|
| 第14楼 netbenton | 发表于 2009-04-15 12:46 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
楼主说的丢失空格问题似乎不存在吧。
|
|
| 第15楼 sady2009 | 发表于 2009-04-15 21:31 |
| 初级用户 发帖 60 积分 58 | |
|
回老大, 如果改成下边这样:
云龙已和张部长纠缠了 {http://www.abc.com/image/234652.gif} 多小时了,不为别的.... 运行后结果是: 云龙已和张部长纠缠了 两个多小时了,不为别的.... 前边的不丢,后边的会丢。tireless老大和您前面的代码的正常。 麻烦看一下。很喜欢这段代码,速度超快的。 [ Last edited by sady2009 on 2009-4-15 at 21:37 ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |