中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何使用批处理实现对文件内容的操作,请高手指点
作者:
标题: 如何使用批处理实现对文件内容的操作,请高手指点 上一主题 | 下一主题
shengxp119
新手上路





积分 4
发帖 4
注册 2008-12-19
状态 离线
『楼 主』:  如何使用批处理实现对文件内容的操作,请高手指点

比如:在一个文件夹下,有几个文本文档:72081217.txt,62081217.txt,121081217.txt```` 所有的文档内容格式差不多,只是内容不一样,下面是其中一个的内容(部分): ====================================================================== 2008-12-17 10:35:05 Batch File Started ====================================================================== Login completed successfully Existing sessions to specified NE Session ID: 20 User: yhtzp Host: somcsys2 Source: TTY BATCH CMD -> disp_act all NE RESPONSE -> ACTIVE ALARM INFORMATION FOR LOCATION 0: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description -------------------- ---- ---- -------- ---------- --------------------------- MMS 44 0 0 16 FMIC 008027A2 09-29-2008 Synchronization Loss OOS (MSI) 10:31:37 Timer Expired Estimated restoral-60.0 secs MMS 29 0 0 16 FMIC 00801F13 04-11-2008 Synchronization Loss OOS 11:17:20 Timer Expired Estimated restoral-60.0 secs ACTIVE ALARM INFORMATION FOR LOCATION 1: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description -------------------- ---- ---- -------- ---------- --------------------------- MMS 0 1 0 16 FMIC 01800019 12-08-2008 Synchronization Loss OOS (NIU) 20:15:17 Timer Expired Estimated restoral-60.0 secs IAS 0 0 0 104 FMIC Untagged 12-17-2008 Fan Tray 1 Failure 10:34:42 IAS 0 0 0 105 FMIC Untagged 12-02-2008 Fan Tray 2 Failure 10:23:31 ACTIVE ALARM INFORMATION FOR LOCATION 2: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description -------------------- ---- ---- -------- ---------- --------------------------- GCLK 0 0 0 4 FMIC 02000005 12-11-2008 Phase Lock Lost (H2SC) 14:27:46 GCLK 0 0 0 14 FMIC 02000008 12-11-2008 Phase Lock Failure (H2SC) 14:36:06 ACTIVE ALARM INFORMATION FOR LOCATION 3: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description -------------------- ---- ---- -------- ---------- --------------------------- IAS 0 0 0 105 FMIC Untagged 12-10-2008 Fan Tray 2 Failure 09:12:50 There are no active alarms at site 4. ACTIVE ALARM INFORMATION FOR LOCATION 5: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description -------------------- ---- ---- -------- ---------- --------------------------- DRI 1 6 0 78 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 07:40:05 DRI 0 0 0 78 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 02:55:25 IAS 2 0 0 93 FMIC Untagged 10-23-2008 Door Open 02:43:35 IAS 1 0 0 93 FMIC Untagged 10-23-2008 Door Open 02:43:35 IAS 0 0 0 93 FMIC Untagged 10-23-2008 Door Open 02:42:42 我要按ACTIVE ALARM INFORMATION FOR LOCATION N(“N”是代替所在的LOCATION号数):,分别查找ALARM为78和243的行,如果有,就输出到ACT。TXT这个文件中,格式如下: 文件名(72081217.txt) ACTIVE ALARM INFORMATION FOR LOCATION 1: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description DRI 1 6 0 78 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 07:40:05 DRI 0 0 0 78 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 02:55:25 ACTIVE ALARM INFORMATION FOR LOCATION 3: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description DRI 1 6 0 78 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 07:40:05 DRI 0 0 0 243 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 02:55:25 文件名(62081217.txt) ACTIVE ALARM INFORMATION FOR LOCATION 0: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description DRI 1 6 0 78 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 07:40:05 DRI 0 0 0 243 FMIC Untagged 10-23-2008 Tx VSWR Antenna Fault (CTU2) 02:55:25


2008-12-20 17:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shengxp119
新手上路





积分 4
发帖 4
注册 2008-12-19
状态 离线
『第 2 楼』:  如何实现以上的功能啊?

怎么没有一个人回复喃? 究竟怎么样才能使用批处理,完成以上的目的哦?


2008-12-21 22:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





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

@echo off
set "Head=(echo ACTIVE ALARM INFORMATION FOR LOCATION !N!& echo.& echo Device              Alarm Clear& echo    ^(Subtype^)         Code Type Tag^(hex^) Date/Time  Description)"

setlocal EnableDelayedExpansion

for /f "delims=" %%F in ('findstr /m /c:"78 FMIC" /c:"243 FMIC" "*.txt"') do (
  echo %%~nxF>>ACT.txt
  for /f "tokens=1-6,*" %%1 in (%%~sF) do (
    if "%%5"=="LOCATION" set "!N!=" 2>nul & set N=%%6
    if defined 括号行 set "括号行=" & echo    %%1                               %%2 %%3 %%4>>ACT.txt
    for %%a in (78 243) do (
      if "%%5"=="%%a" (
        if not defined !N! set "!N!=." & (if defined 空行 echo.>>ACT.txt)&%Head%>>ACT.txt
        echo %%1 %%2 %%3 %%4              %%5 %%6 %%7>>ACT.txt
        set "括号行=." & set "空行=."
      )
    )
  )
  echo.>>ACT.txt & set "空行="
)


2008-12-22 19:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shengxp119
新手上路





积分 4
发帖 4
注册 2008-12-19
状态 离线
『第 4 楼』:  我用了,很好,很强大,太感谢了

能不能解释一下喃,我刚接触不批处理不久,还有很多不懂,希望能解释下上面的代码,学习,学习```


2008-12-23 01:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  Re 4楼

哪句不懂,就问哪句,有很多热心人会告诉你答案;如果全部不懂,建议先去学习基础教程,这样才能更快的掌握批处理。




2008-12-23 10:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shengxp119
新手上路





积分 4
发帖 4
注册 2008-12-19
状态 离线
『第 6 楼』:  

if "%%5"=="LOCATION" set "!N!=" 2>nul & set N=%%6 if defined 括号行 set "括号行=" & echo %%1 %%2 %%3 %%4>>ACT.txt for %%a in (78 243) do ( if "%%5"=="%%a" ( if not defined !N! set "!N!=." & (if defined 空行 echo.>>ACT.txt)&%Head%>>ACT.txt echo %%1 %%2 %%3 %%4 %%5 %%6 %%7>>ACT.txt set "括号行=." & set "空行=." ) ) 就是这段的作用不是太清楚 特别是:if "%%5"=="LOCATION" set "!N!=" 2>nul & set N=%%6 和if not defined !N! set "!N!=." & (if defined 空行 echo.>>ACT.txt)&%Head%>>ACT.txt 这两句


2008-12-23 18:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





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

思路: 当碰到 ACTIVE ALARM INFORMATION FOR LOCATION 3: 这样的行,就设置变量 N 的值为 3:,这样一来,下面的行碰到 78 或 243,就能用之前已设好的 N 变量,而要输出 78 或 243 这样的行时,需要一个“头”:
ACTIVE ALARM INFORMATION FOR LOCATION 3: Device Alarm Clear (Subtype) Code Type Tag(hex) Date/Time Description
所以又要把 3: 定义为变量,这样才能控制一个“N”就输出一个“头”,而由于要处理多个文件,所以要清空 3: 变量的值。 理解别人的思路不太容易,所以实在理解不了不去理解也罢。这段代码我断断续续想了几个小时 - -,屡想放弃。 [ Last edited by tireless on 2008-12-23 at 20:50 ]


   此帖被 +7 点积分      点击查看详情   
评分人:【 moniuming 分数: +7  时间:2008-12-23 21:12


2008-12-23 20:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: