中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]提取指定字符串前几个字符的处理
作者:
标题: [已结]提取指定字符串前几个字符的处理 上一主题 | 下一主题
hackate
中级用户





积分 228
发帖 125
注册 2008-8-25
状态 离线
『楼 主』:  [已结]提取指定字符串前几个字符的处理

例如文本文件a.txt内容:
abckjdhasldjfajlksdf54k
gfasdfgsadfagfdsgsdfgfdsg54ksdfg
asdlfkj;alsdjf;lkjfdalskj;alskfjfdjaa54kdfhkdafshka

提取字符串"54k"前面16位不包括54k

提取后结果保存到文本b.txt内容如下:
jdhasldjfajlksdf
dfagfdsgsdfgfdsg
lskj;alskfjfdjaa

看看大家都有什么好的处理方式,我感觉用纯批处理来做这个题有点低效率呢

[ Last edited by HAT on 2008-11-22 at 13:22 ]

2008-11-21 19:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@echo off
setlocal enabledelayedexpansion
for /f %%a in (a.txt) do (
  set "str1=%%a"
  set "str1=!str1:54k= !
  for /f %%h in ("!str1!") do (
    set "str2=%%h"
    echo !str2:~-16!
  )
)
pause


   此帖被 +2 点积分    点击查看详情   
评分人:【 hackate 分数: +2  时间:2008-11-22 13:02




2008-11-21 19:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hackate
中级用户





积分 228
发帖 125
注册 2008-8-25
状态 离线
『第 3 楼』:  

@echo off
for /f "delims=" %%a in (chuli.txt) do (
setlocal enabledelayedexpansion
set "hang=%%a"
set "hang=!hang:54k= !"
call:guolv !hang!
endlocal
)
pause
goto :eof

:guolv
for /f "delims= " %%b in ("%~1") do (
set "str=%%b"
echo !str:~-16!
)
goto :eof


用我的方法  其中的 ;  这个符号就会被过滤掉,导致这三行文本,前两行可以正确,但是最后一行取不到16个字符,但是HAT的方式可以做到...

在此想咨询下HAT兄,能否指正一下我错在哪了?是不是因为我使用了CALL传递参数过程传递不了; 这个符号吗?希望能够详细解答下..

2008-11-21 20:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hackate
中级用户





积分 228
发帖 125
注册 2008-8-25
状态 离线
『第 4 楼』:  

感谢HAT.已经明白了.谢谢谢谢了....

2008-11-21 20:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

1. 如果想把setlocal enabledelayedexpansion放到for里面,建议放到set "hang=%%a"下面,否则会忽略感叹号。
2. 建议养成代码缩进的好习惯。

   此帖被 +2 点积分    点击查看详情   
评分人:【 hackate 分数: +2  时间:2008-11-22 13:02




2008-11-21 20:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hackate
中级用户





积分 228
发帖 125
注册 2008-8-25
状态 离线
『第 6 楼』:  

谢谢,,一点分数表示感谢..!

2008-11-22 13:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cq1005
新手上路





积分 1
发帖 2
注册 2008-12-11
状态 离线
『第 7 楼』:  

谢谢谢谢了....

2008-12-12 14:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: