中国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 楼』:  

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 楼』:  

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 楼』:  

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 楼』:  

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 楼』:  

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 楼』:  

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!
批处理的教学 www.cn-dos.net/forum ... 批处理最完整人性化教程 www.cn-dos.net/forum ... 批处理新手FAQ整理 www.cn-dos.net/forum ... 中国DOS联盟批处理室经典帖子合集 www.cn-dos.net/forum ...




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


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



论坛跳转: