我有一个这样的文本文件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,VCC_12V
~
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,VCC_12V
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 ]
@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 "^--" "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 ]
Originally posted by terse at 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 ...
非常感谢!
但是还是有一点小小的问题,我想把文本最后框中的字符和最后一行那个“/”也删除掉,如下图:

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