中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-10 18:50
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何读取文本每一行中的指定字符串? 查看 824 回复 13
楼 主 [已结]如何读取文本每一行中的指定字符串? 发表于 2008-12-06 09:11 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
d:\mp3.txt
DATA("CLUB慢摇","http://www.xxx.cn/dj/慢摇舞曲/CLUB慢摇.mp3");
DATA("包房专用经典Club慢摇串烧","http://www.xxx.cn/dj/包房专用经典Club慢摇串烧.mp3");
DATA("MC龍魔猪9月激情开场","http://www.xxx.cn/dj/MC龍魔猪9月激情开场.mp3");
DATA("aaaaa","http://www.xxx.cn/dj/aaaaa.mp3");
.....................................................................
.....................................................................
无数这样格式的行

现在我想提取并输出每行中的http://www.xxx.cn/dj/aaaaa.mp3链接地址到d:\address.txt

批处理:
@echo off
set/p var=<d:\mp3.txt
for /f "tokens=4" %%a in ("%var:"= %") do echo %%a >d:\address.txt
pause>nul


查看address.txt,只被输出第一行内容:

http://www.xxx.cn/dj/慢摇舞曲/CLUB慢摇.mp3

何故?我想要的是mp3.txt中每行的链接地址。

新手,麻烦大家帮帮忙。

谢谢10楼的朋友,问题解决。

[ Last edited by HAT on 2008-12-6 at 11:56 ]
2 发表于 2008-12-06 09:14 ·  中国 广东 韶关 电信
高级用户
★★★
CMD感染者
积分 691
发帖 383
注册 2008-05-23 00:38
18年会员
UID 119451
性别 男
状态 离线
开启延时
3 发表于 2008-12-06 09:16 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
不明白,我是新手,能说明白一点吗?
4 发表于 2008-12-06 09:32 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
搜索了一下论坛,改进后还是不行
@echo off & setlocal EnableDelayedExpansion
set/p var=<d:\mp3.txt
for /f "tokens=4" %%a in ("%var:"= %") do (
echo %%a >d:\address.txt
set /a n+=1 & if !n!==234 goto out
)
pause>nul
:out
echo.输出完成
pause
5 发表于 2008-12-06 09:46 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@for /f "delims=,) tokens=2" %%a in (d:\mp3.txt) do @>>d:\address.txt echo %%~a


[ Last edited by tireless on 2008-12-6 at 09:48 ]
6 发表于 2008-12-06 10:06 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
上面朋友的不适合我用啊,文本每行有多个),不能以此作为分隔符,读取到的是不完整的片段
http://www.wodedj.cn/588djmusicdj0354/RM_588DJ_CN-(剩下1天改地址
DJ小维再次全力打造包房专用经典Club慢摇串烧"
http://www.wodedj.cn/588djmusicdj0354/RM_588DJ_CN-(剩下1天改地址
7 发表于 2008-12-06 10:25 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
5 楼的代码处理 1 楼贴出的格式是没问题的。

能否把示例贴得完整些?
8 发表于 2008-12-06 10:39 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
MP3.TXT完整内容补到一楼
9 发表于 2008-12-06 10:42 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
我的意思是想以“作为分割符号,取第四段。
10 发表于 2008-12-06 11:03 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@echo off
for /f "delims=, tokens=1,*" %%a in (d:\mp3.txt) do (
set str=%%~b
>>d:\address.txt call echo.%%str:");=%%
)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
HAT +2 2008-12-06 11:54
11 发表于 2008-12-06 11:08 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
先谢了,测试通过,研究一下
12 发表于 2008-12-06 11:31 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
@echo off
for /f "delims=, tokens=1,*" %%a in (d:\mp3.txt) do (
set str=%%~b
>>d:\address.txt call echo.%%str:");=%%
)

对d:\mp3.txt中每一行的内容以,作为分割符,取第1列给 %%a ,其后的列都给 %%b,得到%%b的值为:http://www.xxx.cn/dj/aaaaa.xxx");去除");并输出到address.txt文本中。

理解了思路,但还想把CODE中几个我认为比较特殊的地方弄明白。
set str=%%~b
那个~是什么意思?
call echo.%%str:");=%%是去除");的,可是我吧这句删了就不能运行了,为什么?

。。。学习
13 发表于 2008-12-06 11:42 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
那个~是什么意思?

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串

可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。


call echo.%%str:");=%%是去除");的,可是我吧这句删了就不能运行了,为什么?

去掉会提示“命令语法不正确。”。
14 发表于 2008-12-06 11:51 ·  中国 山西 太原 联通
初级用户
积分 42
发帖 37
注册 2008-12-05 23:59
17年会员
UID 133025
性别 男
状态 离线
完全明白了,谢谢!!
>>d:\address.txt call echo.%%str:");=%%
这句是完整的一句,去除指定字符后输出到address.txt 。
论坛跳转: