中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理按条件获取TXT文件内容(已解决)感谢Hanyeguxing
« [1] [2] »
作者:
标题: 批处理按条件获取TXT文件内容(已解决)感谢Hanyeguxing 上一主题 | 下一主题
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『楼 主』:  批处理按条件获取TXT文件内容(已解决)感谢Hanyeguxing

有个问题请教一下


A.TXT文本内容:

状态 游戏名称 开始时间 结束时间 下载版本 任务说明
成功 地下城与勇士 20090625 14:23:40 2009
成功 特种部队 20090625 15:08:13 2009
成功 FIFA Online2 20090625 15:25:19 2009
成功 机战Online 20090625 15:41:31 2009
成功 大话西游 20090625 15:49:55 2009
成功 跑跑卡丁车 20090628 15:42:58 2009


功能要求应该是这样:

读取A.txt的内容,把日期为今天的和显示"成功"的都输出到 今天更新.txt里面,只要第二个字段就可以了,也就是游戏名

然后再根据 今天更新.txt 执行xcopy



问题解决了,在18楼,感谢Hanyeguxing的热心帮助




最终代码


@echo off&&setlocal enabledelayedexpansion
set datais=C:\
del !datais!今天更新.txt /f /q>nul 2>nul
del !datais!更新对比.bat /f /q>nul 2>nul
set han=%date:~0,4%%date:~5,2%%date:~8,2%
For /f "skip=1 tokens=1-3 delims=," %%a in (!datais!A.txt) do (
set gu=%%a
set ye=%%b
For /f "tokens=1-3 delims=- " %%i in ("%%c") do (
set str1=0%%j
set str2=0%%k
set xing=%%i!str1:~-2!!str2:~-2!
)
if "!gu!" == "成功" if "!xing!" == "!han!" (

@Echo xcopy F:\更多网游\!ye!\*.* H:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
@Echo xcopy F:\更多网游\!ye!\*.* K:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
@Echo xcopy F:\更多网游\!ye!\*.* N:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
@Echo xcopy F:\更多网游\!ye!\*.* Q:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
)
)
@Echo exit >>!datais!更新对比.bat
start !datais!更新对比.bat
pause

[ Last edited by wmysbbs on 2009-6-25 at 13:45 ]

2009-6-25 10:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

你的方法行不通,也许你的意思是要写成
@echo off
For /f "skip=1 tokens=1,2,3,4,5*" %%a In (更新.txt) Do (
if "%%c" == "%date:~0,4%%date:~5,2%%date:~8,2%" echo %%a %%b %%c %%d %%e >>更新2.txt
)
但这会过滤掉
成功 FIFA Online2 20090625 15:25:19 2009
这一行的。

所以,你要弄清楚“成功 FIFA Online2 20090625 15:25:19 2009”这行中,每一段的分隔符都是什么。

如果都是空格,那就需要想别的办法了

最好把你要处理的txt 文本文件打包压缩上传上来,大家好分析

[ Last edited by Hanyeguxing on 2009-6-25 at 11:20 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-25 11:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 3 楼』:  

收到,这样是不是只能输入五行

2009-6-25 11:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 4 楼』:  

我刚查了资料,改了一下,不过这段代码杂了,但还是可以实现我要的功能



@echo off&&setlocal enabledelayedexpansion
set datais=C:\
if exist !datais!今天更新.txt del !datais!今天更新.txt/f/q


:::::作用,取得A.txt内容,将日期格式改为00001122
For /f "tokens=1-3 delims=-" %%i in (!datais!A.txt) do (
    set str1=%%j
    set str2=%%k
    if "!str1:~1!"=="" set str1=0!str1!
    if "!str2:~1!"=="" set str2=0!str2!
    echo %%i-!str1!-!str2! >>!datais!B.txt
)


:::::作用,取得B.txt内容,将,号和-号清除
For /f "tokens=*" %%a in (!datais!B.txt) do (
set var=%%a
set "var=!var:,= !"
set "var=!var:-=!"
>>!datais!更新.txt echo !var!
)


:::::作用,取得当前日期,输出包含当前日期的内容
@echo %date:~0,4%%date:~5,2%%date:~8,2% >>!datais!当前日期.txt
for  /f "delims=" %%a in (!datais!当前日期.txt) do (
type !datais!更新.txt |findstr  "%%a">!datais!今天更新.txt
)



del !datais!当前日期.txt/f/q
del !datais!更新.txt/f/q
del !datais!B.txt/f/q
pause

2009-6-25 11:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 5 楼』:  

呵呵,有高手帮我简化就好了

下面要实现的就是根据“今天更新.txt“的内容来运行程序

比如:

xcopy E:\地下城与勇士\*.* F:\地下城与勇士\ /s/y/d/e


”地下城与勇士“这个内容就是根据"今天更新.txt"里面的内容获得,是变量,按每一行内容执行xcpoy

2009-6-25 11:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 6 楼』:  

给你简化一下看看。。。
最好把整个思路说清楚。。。
最后的2009是干什么用的?

[ Last edited by Hanyeguxing on 2009-6-25 at 11:37 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-25 11:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 7 楼』:  

感动。。。。

2009-6-25 11:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 8 楼』:  

这是A.txt最原始的内容



状态,游戏名称,开始时间,结束时间,下载版本,任务说明
成功,地下城与勇士,2009-6-25 14:23:40,2009-6-25 14:26:34,V2.42_RC3,已升级成功
成功,特种部队,2009-6-25 15:08:13,2009-6-25 15:10:22,V10119,已升级成功
成功,FIFA Online2,2009-6-25 15:25:19,2009-6-25 15:32:20,V1.0.1.6,已升级成功
成功,机战Online,2009-6-25 15:41:31,2009-6-25 15:55:39,V3200,已升级成功
成功,大话西游,2009-6-25 15:49:55,2009-6-25 15:57:58,V2.0.237,已升级成功
成功,跑跑卡丁车,2009-6-25 15:42:58,2009-6-25 16:00:02,P590,已升级成功
成功,QQTang,2009-6-25 20:58:25,2009-6-25 21:00:06,V3.2,已升级成功
成功,QQ魔域,2009-6-25 21:08:58,2009-6-25 21:10:13,V5183,已升级成功
成功,QQ音速,2009-6-25 21:10:18,2009-6-25 21:15:58,V2.1.7,已升级成功
成功,大话西游3,2009-6-25 21:15:55,2009-6-25 21:21:44,V3.0.115,已升级成功
成功,疯狂赛车,2009-6-25 21:21:44,2009-6-25 21:28:15,V2009060800,已升级成功
成功,街头篮球,2009-6-25 21:28:05,2009-6-25 21:32:24,V1.0.1.0,已升级成功
成功,QQ飞车,2009-6-25 20:44:56,2009-6-25 22:04:03,V56,已升级成功
成功,FIFA Online2,2009-6-25 22:02:25,2009-6-25 22:09:56,V1.0.1.6,已升级成功

2009-6-25 11:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 9 楼』:  

其实这里已经有,分隔符,只是我不会按这个分隔符获取内容

2009-6-25 11:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 10 楼』:  

最后得到的“今天更新.txt”的内容如下



成功 地下城与勇士 20090625 14:23:40 2009
成功 特种部队 20090625 15:08:13 2009
成功 FIFA Online2 20090625 15:25:19 2009
成功 机战Online 20090625 15:41:31 2009
成功 大话西游 20090625 15:49:55 2009
成功 跑跑卡丁车 20090625 15:42:58 2009
成功 QQTang 20090625 20:58:25 2009
成功 QQ魔域 20090625 21:08:58 2009
成功 QQ音速 20090625 21:10:18 2009
成功 大话西游3 20090625 21:15:55 2009
成功 疯狂赛车 20090625 21:21:44 2009
成功 街头篮球 20090625 21:28:05 2009
成功 QQ飞车 20090625 20:44:56 2009
成功 FIFA Online2 20090625 22:02:25 2009

2009-6-25 11:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by Hanyeguxing at 2009-6-25 11:25 AM:
给你简化一下看看。。。
最好把整个思路说清楚。。。
弄明白你的意思了

[ Last edited by Hanyeguxing on 2009-6-25 at 11:32 ]

呵呵,太谢谢你了,我也去多查点资料!!

今天又是有收获

2009-6-25 11:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 12 楼』:  


@echo off&&setlocal enabledelayedexpansion
del C:\今天更新.txt /f /q>nul 2>nul
set han=%date:~0,4%%date:~5,2%%date:~8,2%
For /f "skip=1 tokens=1,2,3,4,5* delims=," %%a in (A.txt) do (
set ye=%%a %%b
For /f "tokens=1,2,3,4,5,6* delims=- " %%i in ("%%c %%d") do (
set str1=0%%j
set str2=0%%k
set xing=%%l %%m
set gu=%%i!str1:~-2!!str2:~-2!
)
if "!gu!" == "!han!" echo !ye! !gu! !xing! >>C:\今天更新.txt
)
pause
你看一下。。。

[ Last edited by Hanyeguxing on 2009-6-25 at 12:43 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 wmysbbs 分数: +2  时间:2009-6-25 12:41




批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-25 12:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 13 楼』:  

哈哈,感谢!!这代码简单了好多!!

2009-6-25 12:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 14 楼』:  

set真好用!!!

我只要今天更新.txt里面的内容是第二个字段的可以吗

地下城与勇士
特种部队
......

2009-6-25 12:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 15 楼』:  

没明白你的意思:
你是说由A.txt 直接经过时间过滤出来,在今日更新.txt不要其他字段了。
还是对今日更新.txt再处理?
如果从A.txt开始做简单。。。。
要在一个帖子里把问题说清楚!



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-25 12:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: