|
hbby
中级用户
积分 220
发帖 99
注册 2005-8-16
状态 离线
|
『楼 主』:
[求助]读取文本内容重命名问题
每天在指定文件夹下生成的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 ]
|
|
2008-3-22 18:30 |
|
|
hbby
中级用户
积分 220
发帖 99
注册 2005-8-16
状态 离线
|
『第
2 楼』:
楼上的老哥,感谢您的解答,您的代码只判断了是否是“开奖公告”,没有判断是否是“终端机销售情况”,所以我调试其他文本会出错,您看能不能再修改下
例如文本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 ]
|
|
2008-3-22 21:31 |
|
|
hbby
中级用户
积分 220
发帖 99
注册 2005-8-16
状态 离线
|
『第
3 楼』:
老哥回复真是快,非常感谢您的帮助,在工作上帮了大忙,向您学习!
|
|
2008-3-22 21:48 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
4 楼』:
发一个
@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
此帖被 +4 点积分 点击查看详情 评分人:【 abcd 】 | 分数: +4 | 时间:2008-3-23 03:05 |
|
|
简单!简单!再简单! |
|
2008-3-23 02:18 |
|
|
hbby
中级用户
积分 220
发帖 99
注册 2005-8-16
状态 离线
|
『第
5 楼』:
请老哥帮忙修改下以下代码,我加了判断当天生成的文本代码,但是运行不成功:
@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 ]
|
|
2008-3-25 00:55 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
6 楼』:
这样行不?
@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
|
简单!简单!再简单! |
|
2008-3-25 02:50 |
|
|
hbby
中级用户
积分 220
发帖 99
注册 2005-8-16
状态 离线
|
『第
7 楼』:
terse老哥判断文本的代码,如果不包含"开奖公告"或“终端机销售情况”的字符,那么程序就会报存在一个重命名文件或找不到文件的错,更或者会更改一个其他的文件名,老哥能否修改下代码使其判断下文本里的第一行字段是否包含“终端机销售情况”的代码,使其判断文本更加准确!谢谢!
|
|
2008-3-25 18:48 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by hbby at 2008-3-25 18:48:
terse老哥判断文本的代码,如果不包含"开奖公告"或“终端机销售情况”的字符,那么程序就会报存在一个重命名文件或找不到文件的错,更或 ... |
|
那就再加一个判断吧
@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
|
简单!简单!再简单! |
|
2008-3-25 22:38 |
|
|
hbby
中级用户
积分 220
发帖 99
注册 2005-8-16
状态 离线
|
『第
9 楼』:
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 ]
|
|
2008-3-26 01:45 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
10 楼』:
为何多写一判断呢 可以省略的吧
|
简单!简单!再简单! |
|
2008-3-26 03:06 |
|