![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 21:37 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]读取文本内容重命名问题 |
| 可打印版本 996 / 9 |
| 第1楼 hbby | 发表于 2008-03-22 18:30 |
| 中级用户 发帖 99 积分 220 | |
|
[求助]读取文本内容重命名问题 每天在指定文件夹下生成的4个报表,报表文件名是随机生成,例如:
kasjfkaaa.txt hsdrsa.txt adfgjka.txt asdffaaa.txt kasjfkaaa.txt的文件内容如下: 七星彩 08024期开奖公告 2008-03-02 21:01:29 开奖结果:1 1 7 2 4 7 2 出球顺序:1+1+7+2+4+7+2 总销售额:223480元 开奖日:2008-03-02,止兑日:2008-03-30 hsdrsa.txt的文件内容如下: 全国联网22选5 08054期开奖公告 2008-03-01 21:49:44 开奖结果:02+05+10+19+22 出球顺序:02+19+22+10+05 总销售额:129314元 开奖日:2008-03-01,止兑日:2008-03-29 adfgjka.txt的文件内容如下: 七星彩 08024期终端机销售情况(注:这里的销售额指的是主玩法和子玩法的合计) 2008-03-02 20:02:54 序号 终端号 净销售票 净销售额 总取消票 总取消额 ---------------------------------------------------- 1 01001 42 110 0 0 2 01002 33 178 0 0 3 01003 85 682 0 0 asdffaaa.txt的文件内容如下: 全国联网29选7 08030期终端机销售情况 2008-03-17 20:02:20 序号 终端号 净销售票 净销售额 总取消票 总取消额 ---------------------------------------------------- 1 01001 0 0 0 0 2 01002 1 8 0 0 3 01003 7 24 0 0 我想通过P处理实现以下几个功能:1、判断当天生成的所有报表文本文件名更改为以下的文件名: 命名规则是:读取文本第一行,内容为“开奖公告”则文件名以“p_”开头,后面跟玩法代码和期号,文本内容第一行为“终端机销售情况”则文件名以“s_”开头,后面跟玩法代码和期号 七星彩代 码为04 全国联网22选5 代码为22 全国联网29选7 代码为29 最后命名出来的结果如下: kasjfkaaa.txt 改为 p_0408024.txt hsdrsa.txt 改为 p_2208054.txt adfgjka.txt 改为 s_0408024.txt asdffaaa.txt 改为 s_2908030.txt 请教高手这种批处理应该怎么写!谢谢! [ Last edited by hbby on 2008-3-22 at 06:32 PM ] |
|
| 第2楼 hbby | 发表于 2008-03-22 21:31 |
| 中级用户 发帖 99 积分 220 | |
|
楼上的老哥,感谢您的解答,您的代码只判断了是否是“开奖公告”,没有判断是否是“终端机销售情况”,所以我调试其他文本会出错,您看能不能再修改下
例如文本sdfgsdg.txt出现以下内容 全国联网29选7 08027期开奖公告 2008-03-10 21:20:56 开奖结果:08+13+20+22+24+25+28 03 出球顺序:28+13+20+24+08+25+22+03 总销售额:37604元 开奖日:2008-03-10,止兑日:2008-04-10 那么您的批处理会认为是p_2208027.txt [ Last edited by hbby on 2008-3-22 at 09:34 PM ] |
|
| 第3楼 hbby | 发表于 2008-03-22 21:48 |
| 中级用户 发帖 99 积分 220 | |
|
老哥回复真是快,非常感谢您的帮助,在工作上帮了大忙,向您学习!
|
|
| 第4楼 terse | 发表于 2008-03-23 02:18 |
| 银牌会员 发帖 946 积分 2,404 | |
|
发一个
@echo off set 七星彩=04 set 全国联网22选5=22 set 全国联网29选7=29 for %%i in (*.txt) do call :lp %%i pause goto :eof :lp for /f "tokens=1-3 delims=期 " %%a in (%1) do if "%%c" == "开奖公告" (call ren %1 p_%%%%a%%%%b.txt&goto :eof) else call ren %1 s_%%%%a%%%%b.txt&goto :eof |
|
| 第5楼 hbby | 发表于 2008-03-25 00:55 |
| 中级用户 发帖 99 积分 220 | |
|
请老哥帮忙修改下以下代码,我加了判断当天生成的文本代码,但是运行不成功:
@echo off set 七星彩=04 set 全国联网22选5=22 set 全国联网29选7=29 set 排列3=35 set 联网36选7=36 set 超级大乐透=85 set 足球胜平负=90 set 足球4场进球=94 set 足球6场半全场胜平负=98 for /f "tokens=1,2,3* delims=- " %%a in ('date /t') do set dt=%%a-%%b-%%c for /f "tokens=1,2,3,4,5" %%a in ('dir *.txt^|find "%dt%"') do for %%i in (%%e) do call :lp %%i pause goto :eof :lp for /f "tokens=1-3 delims=期 " %%a in (%1) do if "%%c" == "开奖公告" (call ren %1 p_%%%%a%%%%b.txt&goto :eof) else call ren %1 s_%%%%a%%%%b.txt&goto :eof 老哥您的代码里判断文本的代码,如果不包含"开奖公告"或“终端机销售情况”的字符,那么就会报报存在一个重命名文件或找不到文件的错,更或者会更改一个其他的文件名,老哥能否修改下代码使其判断下文本里的第一行字段是否包含“终端机销售情况”的代码,使其判断文本更加准确!谢谢! 我用以下代码就可以: @echo off for /f "tokens=1,2,3* delims=- " %%a in ('date /t') do set dt=%%a-%%b-%%c for /f "tokens=1,2,3,4,5" %%a in ('dir *.txt^|find "%dt%"') do for %%i in (%%e) do ( set flag= for /f "usebackq tokens=1,2,3 delims=期( " %%a in ("%%i") do ( if not defined flag ( if /i %%c==开奖公告 ( if /i %%a==七星彩 ( ren "%%i" "p_04%%b.txt" ) if /i %%a==全国联网22选5 ( ren "%%i" "p_22%%b.txt" ) if /i %%a==全国联网29选7 ( ren "%%i" "p_29%%b.txt" ) if /i %%a==排列3 ( ren "%%i" "p_35%%b.txt" ) if /i %%a==联网36选7 ( ren "%%i" "p_36%%b.txt" ) if /i %%a==超级大乐透 ( ren "%%i" "p_85%%b.txt" ) if /i %%a==足球胜平负 ( ren "%%i" "p_90%%b.txt" ) if /i %%a==足球4场进球 ( ren "%%i" "p_94%%b.txt" ) if /i %%a==足球6场半全场胜平负 ( ren "%%i" "p_98%%b.txt" ) ) if /i %%c==终端机销售情况 ( if /i %%a==七星彩 ( ren "%%i" "s_04%%b.txt" ) if /i %%a==全国联网22选5 ( ren "%%i" "s_22%%b.txt" ) if /i %%a==全国联网29选7 ( ren "%%i" "s_29%%b.txt" ) if /i %%a==排列3 ( ren "%%i" "s_35%%b.txt" ) if /i %%a==联网36选7 ( ren "%%i" "s_36%%b.txt" ) if /i %%a==超级大乐透 ( ren "%%i" "s_85%%b.txt" ) if /i %%a==足球胜平负 ( ren "%%i" "s_90%%b.txt" ) if /i %%a==足球4场进球 ( ren "%%i" "s_94%%b.txt" ) if /i %%a==足球6场半全场胜平负 ( ren "%%i" "s_98%%b.txt" ) ) set flag=flag ) ) ) 谢谢!! [ Last edited by hbby on 2008-3-25 at 01:31 AM ] |
|
| 第6楼 terse | 发表于 2008-03-25 02:50 |
| 银牌会员 发帖 946 积分 2,404 | |
|
这样行不?
@echo off set 七星彩=04 set 全国联网22选5=22 set 全国联网29选7=29 set 排列3=35 set 联网36选7=36 set 超级大乐透=85 set 足球胜平负=90 set 足球4场进球=94 set 足球6场半全场胜平负=98 for /f %%a in ('date /t') do set dt=%%a for /f %%i in ('dir /b /s /a-d *.txt 2^>nul') do ( findstr /ic:"%dt%" "%%i" >nul 2>nul&& call :lp "%%i" ) pause :lp for /f "tokens=1-3 delims=期 " %%a in (%~1) do if "%%c" == "开奖公告" (call ren %1 p_%%%%a%%%%b.txt&goto :eof) else call ren %1 s_%%%%a%%%%b.txt&goto :eof |
|
| 第7楼 hbby | 发表于 2008-03-25 18:48 |
| 中级用户 发帖 99 积分 220 | |
|
terse老哥判断文本的代码,如果不包含"开奖公告"或“终端机销售情况”的字符,那么程序就会报存在一个重命名文件或找不到文件的错,更或者会更改一个其他的文件名,老哥能否修改下代码使其判断下文本里的第一行字段是否包含“终端机销售情况”的代码,使其判断文本更加准确!谢谢!
|
|
| 第8楼 terse | 发表于 2008-03-25 22:38 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by hbby at 2008-3-25 18:48: 那就再加一个判断吧 @echo off set 七星彩=04 set 全国联网22选5=22 set 全国联网29选7=29 set 排列3=35 set 联网36选7=36 set 超级大乐透=85 set 足球胜平负=90 set 足球4场进球=94 set 足球6场半全场胜平负=98 for /f %%a in ('date /t') do set dt=%%a for /f %%i in ('dir /b /s /a-d *.txt 2^>nul') do ( findstr /ic:"%dt%" "%%i" >nul 2>nul&& call :lp "%%i" ) pause :lp for /f "tokens=1-3 delims=期( " %%a in (%~1) do if "%%c" == "开奖公告" (call ren %1 p_%%%%a%%%%b.txt&goto :eof) else if "%%c" == "终端机销售情况" (call ren %1 s_%%%%a%%%%b.txt&goto :eof) else goto :eof |
|
| 第9楼 hbby | 发表于 2008-03-26 01:45 |
| 中级用户 发帖 99 积分 220 | |
|
thank you very very much!
解决后的代码是:(自己存档用) @echo off set 七星彩=04 set 全国联网22选5=22 set 全国联网29选7=29 set 排列3=35 set 联网36选7=36 set 超级大乐透=85 set 足球胜平负=90 set 足球4场进球=94 set 足球6场半全场胜平负=98 for /f "tokens=1,2,3* delims=- " %%a in ('date /t') do set dt=%%a-%%b-%%c for /f "tokens=1,2,3,4,5" %%a in ('dir *.txt^|find "%dt%"') do for %%i in (%%e) do call :lp %%i pause goto :eof :lp for /f "tokens=1-3 delims=期 " %%a in (%1) do if "%%c" == "开奖公告" (call ren %1 p_%%%%a%%%%b.txt&goto :eof) else if "%%c" == "终端机销售情况" (call ren %1 s_%%%%a%%%%b.txt&goto :eof) else if "%%c" == "终端机销售情况(注:这里的销售额指的是主玩法和子玩法的合计)" (call ren %1 s_%%%%a%%%%b.txt&goto :eof) else goto :eof [ Last edited by hbby on 2008-3-26 at 02:01 AM ] |
|
| 第10楼 terse | 发表于 2008-03-26 03:06 |
| 银牌会员 发帖 946 积分 2,404 | |
|
为何多写一判断呢 可以省略的吧
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |