标题: 如何使用批处理实现对文件内容的操作,请高手指点
[打印本页]
作者: shengxp119
时间: 2008-12-20 17:32
标题: 如何使用批处理实现对文件内容的操作,请高手指点
比如:在一个文件夹下,有几个文本文档: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
作者: shengxp119
时间: 2008-12-21 22:44
标题: 如何实现以上的功能啊?
怎么没有一个人回复喃?
究竟怎么样才能使用批处理,完成以上的目的哦?
作者: tireless
时间: 2008-12-22 19:14
@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 "空行="
)
作者: shengxp119
时间: 2008-12-23 01:02
标题: 我用了,很好,很强大,太感谢了
能不能解释一下喃,我刚接触不批处理不久,还有很多不懂,希望能解释下上面的代码,学习,学习```
作者: HAT
时间: 2008-12-23 10:17
标题: Re 4楼
哪句不懂,就问哪句,有很多热心人会告诉你答案;如果全部不懂,建议先去学习基础教程,这样才能更快的掌握批处理。
作者: shengxp119
时间: 2008-12-23 18:17
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
这两句
作者: tireless
时间: 2008-12-23 20:46
标题: Re 6楼
思路:
当碰到
ACTIVE ALARM INFORMATION FOR LOCATION 3: 这样的行,就设置变量 N 的值为
3:,这样一来,下面的行碰到 78 或 243,就能用之前已设好的 N 变量,而要输出 78 或 243 这样的行时,需要
一个“头”:
Quote: |
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 ]