找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 71373|回复: 15

[文本处理] 批处理如何删除文本中的指定字符串?

[复制链接]
发表于 2013-1-5 21:30:10 | 显示全部楼层 |阅读模式
本帖最后由 新手 于 2013-1-7 16:21 编辑

现有文本文件1.txt  
内容为:
showLog=显示日志
properties=[
expires=[164]过期
notAvailable=不可用
noUser=[166]= 没有用户 =
favorites=收藏夹
defaultLanguage=]
key.ctrl=[99993]Ctrl
key.cmd=[99994]Cmd
query=[20123631]查询
wikiPage=[20123633]Wiki页面

方括号[] 中内容都是数字,长度不等。
现要求将方括号[]之间的内容,连同方括号同时删除,如 “query=[20123631]查询” 变成 “query=查询”。
有请各位高手解决?谢谢了。
忘记说了,是在windows 环境下
发表于 2013-1-6 14:42:59 | 显示全部楼层
  1. sed "s/\[.*\]//" a.txt >b.txt
复制代码
发表于 2013-1-6 14:44:33 | 显示全部楼层
  1. sed "s/\[.*\]\|\[\|\]//" a.txt >c.txt
复制代码
 楼主| 发表于 2013-1-7 16:10:10 | 显示全部楼层
谢谢解答,不过没有成功,提示
sed 不是内部命令或外部命令,也不是可执行程序或批处理命令
发表于 2013-1-7 17:31:06 | 显示全部楼层
发表于 2013-1-7 18:15:32 | 显示全部楼层
fr test.txt /r:"[\d*]" -t:"[]"

http://baiy.cn/utils/fr/index.htm
 楼主| 发表于 2013-1-8 11:30:16 | 显示全部楼层
谢谢各位的回复,能否只使用 windows本身提供的命令来实现这一功能要求
发表于 2013-1-8 11:59:39 | 显示全部楼层
谢谢各位的回复,能否只使用 windows本身提供的命令来实现这一功能要求
新手 发表于 2013-1-8 11:30

好 那么这条 properties=[   是否变为     properties=
 楼主| 发表于 2013-1-9 23:56:02 | 显示全部楼层
回复 8# terse
谢谢你的回复,只删除同时含有[ 、] 这一对字符串中的内容以及[、]本身,只含有[、]之一的则不变。
发表于 2013-1-10 10:58:02 | 显示全部楼层
本帖最后由 poter 于 2013-1-10 11:11 编辑

用VBS的话就很简单了,用BAT的话想不出有什么更简单的,把123.txt改成你自己的文本名字吧
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f %%i in (123.txt) do (
  4.         set /a a+=1
  5.         set a!a!=!a!:%%i
  6. )
  7. set a=
  8. for /f %%j in ('findstr /n "[[][0-9]" 123.txt') do (
  9.         set str=%%j&set str=!str:[= !&set str=!str:]= !
  10.         for /f "tokens=1,3,4 delims= " %%k in ("!str!") do (
  11.                 set str1=%%k%%l%%m
  12.                 set count=%%k%%l%%m&set count=!count::= !
  13.                 for /f "delims= " %%l in ("!count!") do (
  14.                         set count1=%%l
  15.                         set a!count1!=!str1!
  16.                 )
  17.         )
  18. )

  19. for /f %%z in (123.txt) do (
  20.         set /a a+=1
  21.         call set str1=%%a!a!%%&set str1=!str1::= !
  22.         for /f "tokens=2 delims= " %%q in ("!str1!") do (
  23.                 echo %%q
  24.         )
  25. )>>$

  26. move /y $ 123.txt
复制代码
发表于 2013-1-10 12:53:35 | 显示全部楼层
不处理特殊字符的话 这样简单
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (test.txt) do (
  3.     set "str=%%i"
  4.     set "s1=!str:*]=!"
  5.     set "s2=!str:*[=!"
  6.     if "!s1!" neq "!s2!" if "!s1!" neq "" if "!s2!" neq "" (
  7.         for /f "tokens=1,3 delims=[]" %%a in ("!str!") do set "str=%%a%%b"
  8.     )
  9.      echo !str!
  10. )
  11. pause
复制代码
发表于 2013-1-10 13:05:44 | 显示全部楼层
VBS的有正则,条理清晰多了
  1. option explicit
  2. dim fso, class1, class2, exp, a
  3. set fso = createobject("scripting.filesystemobject")
  4. set class1 = fso.opentextfile("123.txt")
  5. write(func1(class1.readall))
  6. class1.close

  7. function func1(str)
  8.         set exp = new regexp       
  9.         exp.pattern = "[[][0-9]*[]]"
  10.         exp.global = true
  11.         func1 = exp.replace(str, "")
  12. end function

  13. function write(str)
  14.         set class2 = fso.opentextfile("123.txt", 2)
  15.         class2.write str
  16.         class2.close
  17. end function
复制代码
发表于 2013-1-10 13:08:32 | 显示全部楼层
不处理特殊情况 再简化下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (test.txt) do (
  3.     set str=%%i
  4.     for /f "tokens=1-3 delims=[]" %%a in ("%%i") do (
  5.         if "%%c" neq "" set str=%%a%%c
  6.     )
  7.         echo !str!
  8. )
  9. pause
复制代码
 楼主| 发表于 2013-1-11 00:22:05 | 显示全部楼层
谢谢各位热心高手的回复,尤其是高手 terse,真心感谢你,你的方法很实用,能够详细对每句进行详细解释就更好了。
 楼主| 发表于 2013-1-11 00:35:27 | 显示全部楼层
回复 13# terse


命令执行后,有时怎么会显示“  ECHO 处于关闭状态。”的提示?
请问如何解决这一问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 13:23 , Processed in 0.022495 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表