中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]读取文本内容重命名问题
作者:
标题: [求助]读取文本内容重命名问题 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: