Board logo

标题: [已结]请求一个替换文本的批处理! [打印本页]

作者: terlutor     时间: 2008-10-16 05:36    标题: [已结]请求一个替换文本的批处理!

我有一个这样的文本文件123.txt:(注:“----------”线是我另外加上去的,不在文件中的!)
----------

@13-OCT-08  23:14:54
SHORT_VCC18_DDR2=3.762221(2,)R
R199>8.361087K(8.5K,10.872K)R
~R199(R199)
  EXPECTED        ACTUAL
200103-107|T:X10400:Y11075|10.KO,1pct

~
=200103-107|T:X10400:Y11075|10.KO,1pct
~CHAN A/E: OP_P2
CHAN C/G/GND: GND[3],VCC_12V[123]

~

R190=1.026289K(3,1.241K)R
PS_OPEN=(-20M,20M)V
~
13-OCT-08  23:16:21
BOARD E24 FAILED

~

/13-OCT-08  23:16:21
----------

我想用一个批处理把它变成下面的样子,如下:
----------

@13-OCT-08  23:14:54
SHORT_VCC18_DDR2=3.762221(2,)R
R199>8.361087K(8.5K,10.872K)R
R199(R199)
  EXPECTED        ACTUAL
200103-107|T:X10400:Y11075|10.KO,1pct


=200103-107|T:X10400:Y11075|10.KO,1pct
CHAN A/E: OP_P2
CHAN C/G/GND: GND[3],VCC_12V[123]



R190=1.026289K(3,1.241K)R
PS_OPEN=(-20M,20M)V
13-OCT-08  23:16:21
----------
请问各位大虾,批处理能实现吗?另外文本的行数是不固定的,文本中日期和时间也是随机的,文本中间部分只要去掉“~”就可以了,文本最后7行样式是不变的,变的只是时间和日期,也只要保留时间和日期就可以了!
谢谢大家了!!!
我再用图片补充说明一下,下图中蓝色部分的字符就是我要删除的:

谢谢大家的帮忙!

[ Last edited by HAT on 2008-10-27 at 09:38 ]
作者: moniuming     时间: 2008-10-16 09:31

findstr /v ~ 123.txt
不知道楼主说的最后7行是哪7行.
作者: terlutor     时间: 2008-10-17 00:33


  Quote:
Originally posted by moniuming at 2008-10-16 09:31:
findstr /v ~ 123.txt
不知道楼主说的最后7行是哪7行.

首先谢谢你的关注!
我指的7行是:
~
13-OCT-08  23:16:21
BOARD E24 FAILED

~

/13-OCT-08  23:16:21
可能我表达得不是很清楚,我的意思是这7行只留下日期和时间,其它的全部删除!原贴上部分是原文件,下部分就是我要的结果。可能我的解释有点画蛇添足,倒把人弄糊涂了!
作者: ko20010214     时间: 2008-10-17 00:53
查找 ~  用空格来替代它就可以吧?
change 123.txt /form ~ /to " "

change 这个软件在论坛里有。
作者: terlutor     时间: 2008-10-18 04:06


  Quote:
Originally posted by ko20010214 at 2008-10-17 00:53:
查找 ~  用空格来替代它就可以吧?
change 123.txt /form ~ /to " "

change 这个软件在论坛里有。

谢谢,我试一下看行不行吧!不过我只想用一个批处理来完成!
作者: HAT     时间: 2008-10-18 12:37

@echo off
type nul>"%temp%\123_tmp.txt"
for /f "delims=:" %%a in ('findstr /n .* "123.txt"') do (
  set RowNum=%%a
)
set /a TarRow=RowNum-7
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "123.txt"') do (
  if %%a leq %TarRow% (
    set "str=%%b"
    setlocal enabledelayedexpansion
    if "!str:~0,1!" equ "~" (
      echo.!str:~1!>>"%temp%\123_tmp.txt"
    ) else (
      echo.!str!>>"%temp%\123_tmp.txt"
    )
    endlocal
  )
)
findstr "^[0-1][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9]" "123.txt">>"%temp%\123_tmp.txt"
move /y "%temp%\123_tmp.txt" "123.txt"
[ Last edited by HAT on 2008-10-18 at 13:11 ]
作者: terse     时间: 2008-10-18 12:50

@echo off
cd.>b.txt
for /f "delims=" %%i in ('type "a.txt"^|find /v /c ""') do set /a n=%%i-5
    for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
        setlocal enabledelayedexpansion
        if not "%%j"=="" (
        set str=%%j
        set str=!str:*^~=!
        >>b.txt echo.!str!
        if %%i equ %n% start b.txt&goto :eof
        )else >>b.txt echo.
)
pause

作者: terlutor     时间: 2008-10-19 04:22


  Quote:
Originally posted by HAT at 2008-10-18 12:37:
[code]@echo off
type nul>"%temp%\123_tmp.txt"
for /f "delims=:" %%a in ('findstr /n .* "123.txt"') do (
  set RowNum=%%a
)
set /a TarRow=RowNum-7
for /f " ...

非常感谢!
但是还是有一点小小的问题,我想把文本最后框中的字符也删除掉,如下图:



那么代码应该怎么修改一下呢?谢谢!
作者: terlutor     时间: 2008-10-19 04:34


  Quote:
Originally posted by terse at 2008-10-18 12:50:
[code]
@echo off
cd.>b.txt
for /f "delims=" %%i in ('type "a.txt"^|find /v /c ""') do set /a n=%%i-5
    for /f "tokens=1* delims=:" %%i in ('findstr  ...

非常感谢!
但是还是有一点小小的问题,我想把文本最后框中的字符和最后一行那个“/”也删除掉,如下图:

另外在运行的时候会出现很多行“已经达到最大的 setlocal 递归层。”这句话,是不是我的文件太大(有90K,几千行),我原贴中我简化了的,那么代码应该怎么修改一下呢?自己太菜了,你的代码我还看不太懂,要慢慢研究一下,谢谢!
作者: HAT     时间: 2008-10-19 11:47    标题: Re 8楼

请在顶楼把自己的问题一次性描述清楚
作者: HAT     时间: 2008-10-19 11:48    标题: Re 9楼

参照6楼,给7楼的代码在合适的地方加上一句:
endlocal
作者: terlutor     时间: 2008-10-20 23:07


  Quote:
Originally posted by HAT at 2008-10-19 11:47:
请在顶楼把自己的问题一次性描述清楚

谢谢你的关注!我已在顶楼加上了图片说明!请你再帮帮忙!谢谢!
作者: terse     时间: 2008-10-21 00:42

@echo off&setlocal enabledelayedexpansion
echo.1>nul 3>b.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do (
     set/a n=%%i-7
     if not "%%j"=="" set var=%%j
)
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do (
       if not "%%j"=="" (
       set str=%%j
       set str=!str:*^~=!
       echo.!str!
       if %%i equ %n% echo !var:~1!&goto end
       )else echo.
)
:end
start notepad "b.txt"&exit

作者: terlutor     时间: 2008-10-22 03:21


  Quote:
Originally posted by terse at 2008-10-21 00:42:
[code]
@echo off&setlocal enabledelayedexpansion
echo.1>nul 3>b.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do (
     set/a n=%%i-7
     if n ...

谢谢!Thank you very much!
非常感谢!这正是我想要的!可惜我水平不高,看不太懂!回头要好好研究研究了!这里还真是高手如云!佩服佩服!
作者: HAT     时间: 2008-10-22 09:53    标题: Re 14楼

Good luck! And enjoy your time in CN-DOS!

  Quote:
批处理的教学
http://www.cn-dos.net/forum/viewthread.php?tid=2338

批处理最完整人性化教程
http://www.cn-dos.net/forum/viewthread.php?tid=18482

批处理新手FAQ整理
http://www.cn-dos.net/forum/viewthread.php?tid=34049

中国DOS联盟批处理室经典帖子合集
http://www.cn-dos.net/forum/viewthread.php?tid=31551


作者: terlutor     时间: 2008-10-27 04:46    标题: 非常感谢!

非常感谢你提供链接!我又有得学了!