中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-10 23:03
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]提取指定字符串前几个字符的处理 查看 1,049 回复 6
楼 主 [已结]提取指定字符串前几个字符的处理 发表于 2008-11-21 19:37 ·  中国 福建 漳州 联通
中级用户
★★
积分 228
发帖 125
注册 2008-08-25 19:17
17年会员
UID 124135
性别 男
状态 离线
例如文本文件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 ]
2 发表于 2008-11-21 19:47 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
hackate +2 2008-11-22 13:02
3 发表于 2008-11-21 20:03 ·  中国 福建 漳州 联通
中级用户
★★
积分 228
发帖 125
注册 2008-08-25 19:17
17年会员
UID 124135
性别 男
状态 离线
@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传递参数过程传递不了; 这个符号吗?希望能够详细解答下..
4 发表于 2008-11-21 20:15 ·  中国 福建 漳州 联通
中级用户
★★
积分 228
发帖 125
注册 2008-08-25 19:17
17年会员
UID 124135
性别 男
状态 离线
感谢HAT.已经明白了.谢谢谢谢了....
5 Re 3楼 发表于 2008-11-21 20:23 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
1. 如果想把setlocal enabledelayedexpansion放到for里面,建议放到set "hang=%%a"下面,否则会忽略感叹号。
2. 建议养成代码缩进的好习惯。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
hackate +2 2008-11-22 13:02
6 发表于 2008-11-22 13:03 ·  中国 福建 漳州 联通
中级用户
★★
积分 228
发帖 125
注册 2008-08-25 19:17
17年会员
UID 124135
性别 男
状态 离线
谢谢,,一点分数表示感谢..!
7 发表于 2008-12-12 14:41 ·  中国 上海 嘉定区 电信
新手上路
积分 1
发帖 2
注册 2008-12-11 00:05
17年会员
UID 133485
性别 男
状态 离线
谢谢谢谢了....
论坛跳转: