中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]请求一个替换文本的批处理!
« [1] [2] »
作者:
标题: [已结]请求一个替换文本的批处理! 上一主题 | 下一主题
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『楼 主』:  [已结]请求一个替换文本的批处理!

我有一个这样的文本文件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 ]

2008-10-16 05:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 2 楼』:  


findstr /v ~ 123.txt
不知道楼主说的最后7行是哪7行.

2008-10-16 09:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『第 3 楼』:  



  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行只留下日期和时间,其它的全部删除!原贴上部分是原文件,下部分就是我要的结果。可能我的解释有点画蛇添足,倒把人弄糊涂了!

2008-10-17 00:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ko20010214
版主




积分 7294
发帖 1628
注册 2002-10-16
状态 离线
『第 4 楼』:  

查找 ~  用空格来替代它就可以吧?
change 123.txt /form ~ /to " "

change 这个软件在论坛里有。



ko20010214
=================================
大功告成,打个Kiss!
ko20010214@MSN.com
神州优雅Q300C
Intel CeleronM 370处理器 | 256MbDDR内存
40G硬盘 | USB2.0 | IEEE 1394
13.3 ' WXGA 宽屏(16:10) | COMBO光驱
10/100M网卡 | 四合一读卡器
2008-10-17 00:53
查看资料  发送邮件  发短消息 网志  OICQ (16959102)  编辑帖子  回复  引用回复
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『第 5 楼』:  



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

change 这个软件在论坛里有。

谢谢,我试一下看行不行吧!不过我只想用一个批处理来完成!

2008-10-18 04:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@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 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 terlutor 分数: +1  时间:2008-10-19 02:26




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





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 7 楼』:  


@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


   此帖被 +1 点积分    点击查看详情   
评分人:【 terlutor 分数: +1  时间:2008-10-19 02:27




简单!简单!再简单!
2008-10-18 12:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『第 8 楼』:  



  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 " ...

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



那么代码应该怎么修改一下呢?谢谢!

2008-10-19 04:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『第 9 楼』:  



  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,几千行),我原贴中我简化了的,那么代码应该怎么修改一下呢?自己太菜了,你的代码我还看不太懂,要慢慢研究一下,谢谢!

2008-10-19 04:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

请在顶楼把自己的问题一次性描述清楚



2008-10-19 11:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

参照6楼,给7楼的代码在合适的地方加上一句:
endlocal



2008-10-19 11:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『第 12 楼』:  



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

谢谢你的关注!我已在顶楼加上了图片说明!请你再帮帮忙!谢谢!

2008-10-20 23:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 13 楼』:  


@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


   此帖被 +1 点积分    点击查看详情   
评分人:【 terlutor 分数: +1  时间:2008-10-28 01:23




简单!简单!再简单!
2008-10-21 00:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terlutor
新手上路





积分 8
发帖 8
注册 2008-10-16
状态 离线
『第 14 楼』:  



  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!
非常感谢!这正是我想要的!可惜我水平不高,看不太懂!回头要好好研究研究了!这里还真是高手如云!佩服佩服!

2008-10-22 03:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 15 楼』:  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





2008-10-22 09:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: