中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 从一文本文件中提取多个字段!!
作者:
标题: 从一文本文件中提取多个字段!! 上一主题 | 下一主题
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『楼 主』:  从一文本文件中提取多个字段!!

A.txt文件内容如下


[5791]
F_Id=5791
F_GameName=诸侯Online
F_FromPath=F:\网络游戏\诸侯Online\

[5792]
F_Id=5792
F_GameName=QQ游戏
F_FromPath=F:\棋牌对战\QQGame\



F_FromPath字段的内容是已有固定的

F_FromPath=F:\网络游戏\诸侯Online\
F_FromPath=F:\棋牌对战\QQGame\

根据上次tireless和Hanyeguxing两位高手写的代码:

For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!需要更新.txt) do (
  if not defined %%a (
    for %%? in (H K N Q) do (
      echo [更新]
      echo 远程目录=D:\网络游戏\%%a
      echo 本地目录=%%?:\网络游戏\%%a
      原调用.exe
    ) > cfg.ini
    echo;%%a>>!TBLog!!ha!已更新.txt
  )
)


想将F_FromPath字段的内容作为变量添加到下面这一句!
echo 远程目录=D:\!F_FromPath!\%%a


同样,已经有 需要更新.txt 此文本,里面的内容等于F_GameName里面的内容


再次请教!!

[ Last edited by wmysbbs on 2009-7-5 at 09:22 ]

2009-7-5 03:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 2 楼』:  

是这样吗:

提取 a.txt 中 F_FromPath 等号右边的路径作为已更新的,然后...

[ Last edited by tireless on 2009-7-5 at 11:48 ]

2009-7-5 05:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




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



  Quote:
Originally posted by tireless at 2009-7-5 05:52 AM:
是这样吗:

提取 a.txt 中 F_FromPath 等号右边的路径作为已更新的,然后...:


[ Last edited by tireless on 2009-7-5 at 05:54 ]

不是的,应该是这样,把

改成echo 远程目录=D:\网络游戏\%%a
   
    echo 远程目录=F:\!F_FromPath!%%a
    echo 本地目录==%%?:\!F_FromPath!%%a
本来,echo 远程目录=D:\网络游戏\%%a 像这样固定的没问题,可是遇到源目录不一样的,就不能实现更新了

F_GameName=诸侯Online
F_FromPath=F:\网络游戏\诸侯Online\
F_GameName=QQ游戏
F_FromPath=F:\棋牌对战\QQGame\

这两个的源目录都不一样的


我是想,读取需要更新.txt之后,对比已更新.txt,然后再获取A.txt里面对应的F_FromPath盘符后的值(F:\网络游戏\诸侯Online\)(蓝色部分)

比如:

需要更新.txt
英雄II
地下城与勇士
劲舞团
功夫小子
诸侯Online

已更新.txt
英雄II
地下城与勇士

A.txt
F_GameName=诸侯Online
F_FromPath=F:\游戏\诸侯Online\
F_GameName=劲舞团
F_FromPath=F:\网络游戏\劲舞团\



当读取到未更新的游戏 诸侯Online 时,远程目录的变量等于A.txt里面的F_FromPath盘符后的值,如此循环

cfg.ini输出的内容应该为:
[更新]
远程目录=F:\游戏\诸侯Online\
本地目录=E:\游戏\诸侯Online\

[ Last edited by wmysbbs on 2009-7-5 at 07:59 ]

2009-7-5 07:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 4 楼』:  


@echo off
for /f "delims== tokens=1,* eol=[" %%a in (a.txt) do (
  if /i "%%a"=="F_FromPath" (set #!var!=%%~pb) else set var=%%b
)
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!已更新.txt) do set %%a=.
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!需要更新.txt) do (
  if not defined %%a (
    for %%? in (H K N Q) do (
      echo [更新]
      echo 远程目录=!#%%a!
      set var=!#%%a!
      echo 本地目录=%%?:!var:*:=!
      原调用.exe
    ) > cfg.ini
    echo;%%a>>!TBLog!!ha!已更新.txt
  )
)
[ Last edited by tireless on 2009-7-5 at 11:38 ]

2009-7-5 11:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




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

不行,没成功,最后得出的cfg.ini文件是这样

[更新]
远程目录=
本地目录=Q:*:=

2009-7-5 20:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  

错了两个地方:

少了 setlocal enabledelayedexpansion;
set #!var!=%%~pb 应该是 set #!var!=%%b;

再试试:
@echo off & setlocal enabledelayedexpansion
for /f "delims== tokens=1,* eol=[" %%a in (a.txt) do (
  if /i "%%a"=="F_FromPath" (set #!var!=%%b) else set var=%%b
)
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!已更新.txt) do set %%a=.
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!需要更新.txt) do (
  if not defined %%a (
    for %%? in (H K N Q) do (
      echo [更新]
      echo 远程目录=!#%%a!
      set var=!#%%a!
      echo 本地目录=%%?:!var:*:=!
      原调用.exe
    ) > cfg.ini
    echo;%%a>>!TBLog!!ha!已更新.txt
  )
)


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


2009-7-6 02:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




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

怪不得,今天我自己加了setlocal enabledelayedexpansion


可是还有点问题,按照

A.txt
F_GameName=诸侯Online
F_FromPath=F:\游戏\诸侯Online\
F_GameName=劲舞团
F_FromPath=F:\网络游戏\劲舞团\

的内容是可以了,但:

[5791]
F_Id=5791
F_GameName=诸侯Online
F_GameType=,-1,
F_PcGroupId=,15,16,18,
F_IconIndex=648
F_FromPath=F:\网络游戏\诸侯Online\
F_LocalPath=
F_Reg=
F_RunFile=play.exe
F_RunCmd=
F_Index=
F_UseCount=0
F_LastUseTime=2009-7-4 7:11:03
F_GameInfo=
F_IsUpdateForce=0
F_IsUpdateVer=0
F_IsUpdateDate=0
F_Ver=
F_Date=0
F_DontDeleteFile=False
F_IsUseSize=False
F_IsUseDate=False
F_ErrorDate=False
F_UpdateModel=0
F_FirstWaitRun=False
F_FirstWaitTime=
F_FirstRunFile=
F_FirstRunCmd=
F_ExcludeFile=
F_ExcludePath=
F_ForceUpdateFile=
F_SaveFile=
F_SaveRecover=
F_BackUpdate=
F_ServerVer=
F_ServerList=
F_ServerListStr=
F_AutoUpdate=
F_Usecount2=0
F_Grade=3
F_Vouch=
F_VouchIndex=
F_GameId=102253
F_UpdateTime=20090704071103
F_IsSetting=True
F_DiskType=,115,116,118,
F_AutoDown=True
F_IsFirst=False
F_DownDontDeleteFile=False
F_P2PDown=False
F_P2PDateTime=
F_DisableNoUpdate=False
F_DisableUpdateServer=False
F_AlwaysUpdate=False
F_CD=
F_AddDateTime=2009-7-4 7:11:03
F_ServerGroupId=
F_HotValue=0.75
F_CreateShortCut=False
F_DisableRecover=False
F_IsCooperation=False
F_StartParameter=
LocalPath=F:\网络游戏\诸侯Online\
LocalPath2=8iwKESyAsm2xjzbQvPFVotYyitDiKQs=

[5792]
F_Id=5792
F_GameName=QQ游戏
F_GameType=,-5,
F_PcGroupId=,15,16,18,
F_IconIndex=649
F_FromPath=F:\棋牌对战\QQGame\
F_LocalPath=
F_Reg=
F_RunFile=QQGame.exe
F_RunCmd=
F_Index=
F_UseCount=0
F_LastUseTime=2009-7-4 21:49:57
F_GameInfo=
F_IsUpdateForce=0
F_IsUpdateVer=0
F_IsUpdateDate=0
F_Ver=
F_Date=0
F_DontDeleteFile=False
F_IsUseSize=False
F_IsUseDate=False
F_ErrorDate=False
F_UpdateModel=0
F_FirstWaitRun=False
F_FirstWaitTime=0
F_FirstRunFile=
F_FirstRunCmd=
F_ExcludeFile=
F_ExcludePath=
F_ForceUpdateFile=
F_SaveFile=
F_SaveRecover=
F_BackUpdate=
F_ServerVer=
F_ServerList=
F_ServerListStr=
F_AutoUpdate=
F_Usecount2=0
F_Grade=3
F_Vouch=
F_VouchIndex=
F_GameId=500620
F_UpdateTime=20090704222542
F_IsSetting=True
F_DiskType=,115,116,118,
F_AutoDown=True
F_IsFirst=False
F_DownDontDeleteFile=False
F_P2PDown=False
F_P2PDateTime=
F_DisableNoUpdate=False
F_DisableUpdateServer=False
F_AlwaysUpdate=False
F_CD=
F_AddDateTime=2009-7-4 21:49:57
F_ServerGroupId=
F_HotValue=3.00
F_CreateShortCut=False
F_DisableRecover=False
F_IsCooperation=False
F_StartParameter=
LocalPath=F:\棋牌对战\QQ游戏\
LocalPath2=8iwKGjGHkwirlTzQO048glbrug==



这样的话是出错的

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





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 8 楼』:  


@echo off & setlocal enabledelayedexpansion
for /f "eol=[ delims== tokens=1,*" %%a in (a.txt) do (
  if "%%a"=="F_GameName" (set var=%%b) else (
    if "%%a"=="F_FromPath" set #!var!=%%b
  )
)
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!已更新.txt) do set %%a=.
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!需要更新.txt) do (
  if not defined %%a (
    for %%? in (H K N Q) do (
      echo [更新]
      echo 远程目录=!#%%a!
      set var=!#%%a!
      echo 本地目录=%%?:!var:*:=!
      原调用.exe
    ) > cfg.ini
    echo;%%a>>!TBLog!!ha!已更新.txt
  )
)


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


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




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

谢谢,终于看明白了!!

2009-7-6 11:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: