[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 新手 于 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 环境下

为什么用这个执行后生成的txt内容为空 3# BAT-VBS

TOP

回复 13# terse


命令执行后,有时怎么会显示“  ECHO 处于关闭状态。”的提示?
请问如何解决这一问题?

TOP

谢谢各位热心高手的回复,尤其是高手 terse,真心感谢你,你的方法很实用,能够详细对每句进行详细解释就更好了。

TOP

不处理特殊情况 再简化下
  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
复制代码

TOP

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
复制代码

TOP

不处理特殊字符的话 这样简单
  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
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 8# terse
谢谢你的回复,只删除同时含有[ 、] 这一对字符串中的内容以及[、]本身,只含有[、]之一的则不变。

TOP

谢谢各位的回复,能否只使用 windows本身提供的命令来实现这一功能要求
新手 发表于 2013-1-8 11:30

好 那么这条 properties=[   是否变为     properties=

TOP

谢谢各位的回复,能否只使用 windows本身提供的命令来实现这一功能要求

TOP

fr test.txt /r:"[\d*]" -t:"[]"

http://baiy.cn/utils/fr/index.htm

TOP

TOP

谢谢解答,不过没有成功,提示
sed 不是内部命令或外部命令,也不是可执行程序或批处理命令

TOP

  1. sed "s/\[.*\]\|\[\|\]//" a.txt >c.txt
复制代码

TOP

返回列表