中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 07:04
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 多条件提取数据II 查看 928 回复 7
楼 主 多条件提取数据II 发表于 2009-02-05 12:27 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
不好意思,我又要麻烦大家了。由于是新手上路,求助的时候比较多,请大家多见谅!

上次大家帮助我解决了同时多满足多个条件提取数据的问题,这次请大家再次帮偶一个忙:

同样是一目录下有多个文本,其中一个内容如下:


5422|542202|12310001|18500|2008-3-12|2009-3-11|安晨城
5422|0|12510101|24000|2007-3-19|2009-3-10|安永仙
5422|542202|12550101|22600|2008-1-23|2009-1-22|白通
5422|542206|12540210|39320|2008-4-10|2011-4-9|白晓筠
5422|542202|12510201|40000|2008-12-30|2010-12-29|保琴
5422|542206|12410001|30000|2008-4-29|2010-4-28|蔡必兵
5422|542202|12540210|48400|2008-2-1|2011-1-31|蔡彪
5422|542501|12540210|38500|2008-5-12|2011-5-11|蔡兵
5422|542202|12710101|30000|2008-10-21|2009-10-20|蔡光芬
5422|542204|12310001|29000|2008-12-25|2009-12-24|蔡光忠
5422|542204|12310001|29000|2008-12-25|2009-12-24|蔡娟
5422|542501|12510201|100000|2008-4-23|2010-4-22|蔡先刚
5422|542202|12510201|250000|2008-3-31|2010-3-30|蔡先涛
5422|0|12610001|0|2008-2-26|2008-2-25|曹斌
5422|0|12760001|20000|2008-5-26|2008-2-25|曹斌
5422|542202|12540210|74600|2008-1-9|2010-1-8|陈斌


现要将满足以下其中任意一个条件的该行数据提取到b.txt。(以|为分隔符)
1、第三列数据的前四位为“1231”;
2、第三列数据的前四位为“1241”;
3、第三列数据的前四位为“1254”;

求一批处理,批量将该目录下的所有文本里满足条件的数据提取出来。求
大家帮忙。
2 发表于 2009-02-05 12:54 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
无非就是那几个命令的改改就能用,经常用到为什么不自己学一学
type *.txt|findstr /r /c:".*[|].*[|]1231.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1241.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1254.*[|].*[|].*[|].*[|].*" >>b.txt
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
moniuming +5 2009-02-05 13:01

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
3 发表于 2009-02-05 12:59 ·  中国 广东 广州 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
@echo off
Setlocal Enabledelayedexpansion
for /f "tokens=1,2,3* delims=|" %%a in ('type *.txt') do (
set "str=%%c"
set "var=!str:~,4!"
if "!var!"=="1231" (
echo %%a^|%%b^|%%c^|%%d
) else (
if "!var!"=="1241" (
echo %%a^|%%b^|%%c^|%%d
) else (
if "!var!"=="1254" (echo %%a^|%%b^|%%c^|%%d)
)
)
)>>b.txt
start "" b.txt


[ Last edited by moniuming on 2009-2-5 at 13:00 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
yishanju +8 2009-02-05 15:16
4 发表于 2009-02-06 00:57 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
感谢moniuming及yishanju兄。

不过我想的是一个文本提取后的数据生成另外一个文件名,而不是将该目录下的的所有文件合并生成一个文件。
最好是在原文件名上加一个前缀。
比如a.txt生成一个新的a.csv或a_new.txt文件。我用了>>%%~n0%.csv或等没成功,是哪里错了?

[ Last edited by hgx126 on 2009-2-6 at 22:27 ]
5 发表于 2009-02-06 11:18 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
for /r %%i in (*.txt) do (
findstr /r /c:".*[|].*[|]1231.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1241.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1254.*[|].*[|].*[|].*[|].*" %%i >>%%~ni.cvs
)

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
6 发表于 2009-02-06 11:28 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
for /r %%i in (*.txt) do (
findstr /r /c:".*|.*|1231.*|.*|.*|.*|.*" /c:".*|.*|1241.*|.*|.*|.*|.*" /c:".*|.*|1254.*|.*|.*|.*|.*" %%i >>%%~ni.cvs
)

把命令简化成这样试试看行不行,

[ Last edited by yishanju on 2009-2-6 at 11:29 ]

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
7 发表于 2009-02-07 00:02 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
加一个for应该可以了吧,试试?
@echo off
Setlocal Enabledelayedexpansion
for %%i in (*.txt) do (
for /f "tokens=1,2,3* delims=|" %%a in ('type "%%i"') do (
set "str=%%c"
set "var=!str:~,4!"
if "!var!"=="1231" (
>>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
) else (
if "!var!"=="1241" (
>>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
) else (
if "!var!"=="1254" (
>>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
)
)
)
)
)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
yishanju +8 2009-02-07 00:23
8 发表于 2009-02-09 21:16 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
谢谢
论坛跳转: