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

[文件操作] 批处理如何删除文本中每一行两个指定字符串之间的内容?

本帖最后由 wh1234567 于 2016-12-6 22:06 编辑

例如:
文本1.txt内容如下:
3 a到付vd323----2342次----563648545346----1231313----2014年12月23:22秒  3342多少次3+2vb宝贝+60492奎娥我-32百年vfd2----0030320(不方便方便的)=14+213发放
需要删除每行第二个“----”字符到最后面“=”字符之间的内容。并将结果输出到文本2.txt
或者说:删除每行“次----”字符到“=”字符之间的内容。
输出结果例如:
3 a到付vd323----2342次----=14+213发放
百度里搜索到和这个一样的问题,希望帮助
论坛里搜索了好多也没有找到,百度里也没有找到,是不是以前好多帖子删除过?

  1. @echo off
  2. (for /f "tokens=1-8 delims=-=" %%a in ('type "1.txt"') do (
  3.     echo %%a----%%b----=%%h
  4. ))>2.txt
复制代码
文本处理这事情吧,你需要好好学习 for 命令的使用。
很难通过某个关键字搜索到一个代码正好能解决跟你一模一样的问题。

TOP

本帖最后由 wh1234567 于 2016-12-5 15:53 编辑

回复 2# GNU

处理有点不太准确,能不能按照2个关键词来处理,只删除关键词A到关键词B之间的内容即可。
删除每行“次----”字符到“=”字符之间的内容。
2个关键词允许设定,例如,开头关键词=“次----”,尾部关键词=“=”,然后下面就是处理代码

TOP

回复 3# wh1234567
  1. @echo off
  2. :: gawk下载:http://www.bathome.net/s/tool/index.html?down&key=gawk
  3. :: 删除每行中“唯一”两个自定义“关键词”中间的内容。
  4. set "fs1=次----"     ||@rem 开头关键词
  5. set "fs2=="          ||@rem 尾部关键词
  6. set "a=1.txt"&set "b=2.txt"
  7. gawk -F"%fs1%" "NF>0{OFS=\"\";print $1,FS,\"%fs2%\",$2,$NF}" "%a%"|gawk -F"%fs2%" "{OFS=\"\";print $1 \"%fs2%\" $NF}" >"%b%"
  8. %b%
  9. pause
复制代码
1

评分人数

    • wh1234567: 感谢朋友的帮助,代码很好技术 + 1

TOP

本帖最后由 wh1234567 于 2016-12-5 20:28 编辑

回复 4# CommandBatCmd


    非常感谢您的帮助,不想使用第三方程序的话,这个代码如何修正一下呢?

TOP

回复 5# wh1234567


    2楼的纯P,和4楼的第三方都已经解决了LZ的问题,
是不是真实处理的内容与附件中的不同,想用纯P来处理?

TOP

回复 6# CommandBatCmd

您好,您这个批处理处理效果很好,只是使用第三方程序感觉不太方便,想用纯批处理处理,另外2楼的纯批处理有问题,比如内容里多了一个“----”就会处理出错,所以,如果您这个思路的代码能弄成纯批处理的就更加完美了。

TOP

本帖最后由 CommandBatCmd 于 2016-12-6 01:24 编辑

回复 7# wh1234567


    按照LZ的想法(指定首尾两个字符串),弄一个纯P,可以说是把简单问题复杂化,
因为纯P对于“----”的内容,只能看成四个单独字符来处理,不好整体化(其实是纯P没有这个功能),
尤其是这样的字段长短不一时,用纯P设计起来特别的复杂,没有什么通用性,
要是用纯P弄出一个比较通用性的字符串处理程式,等我把本论坛的那些前辈大牛们的帖子研究透了再说吧!
脚本就是实际问题实际解决,比较灵活。
希望能够回答了LZ的问题。

TOP

本帖最后由 wh1234567 于 2016-12-5 23:26 编辑

回复 8# CommandBatCmd


    我的意思是只要不使用第三方程序的批处理就行,设定的关键词用引号是不是就不会处理出错了?

TOP

回复 9# wh1234567


    加双引号不出错,这要看输入的字符串是否含有特殊字符,如:百分号、引号本身等等,
添加了双引号后,可多容纳几个特殊字符,但也解决不了随时遇到的情况,
LZ想搞成怎样,可先弄个P代码框架,需要解决那部分的问题,发上来,让坛友们帮帮你。

TOP

回复 1# wh1234567
  1. set "one=----"
  2. set "two=="
  3. for %%i in (one,two)do (
  4. for /l %%n in (0,1,8192)do if /i not "!%%~i:~%%n,1!"=="" set/a "%%~i_n=%%~n+1"
  5. echo,!%%~i_n!
  6. )
  7. for /f "delims=" %%i in ('type "%~dp0批处理如何删除文本中每一行两个指定字符串之间的内容.txt"')do (
  8. set "Character=%%i"
  9. set "n="
  10. set "new_one="
  11. set "new_two="
  12. for /l %%n in (0,1,8192)do if /i not "!Character:~%%~n,1!"=="" if /i "!Character:~%%~n,%one_n%!"=="!one!" (
  13.   set/a "n+=1"
  14.   if !n!==2 (
  15.    set "new_one=!Character:~0,%%~n!"
  16.   )
  17. )else if /i "!Character:~%%~n,%two_n%!"=="!two!" (
  18.   set "new_two=!Character:~%%~n!"
  19. )
  20. echo,!new_one!!new_two!
  21. )
复制代码
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 10# CommandBatCmd

就按照您这个思路写个通用批处理就行,很简洁,删除2个字符串之间的内容。楼下的我有点看不懂,好多年没学了,忘记了,唉

TOP

回复 12# wh1234567


   只要你喜欢纯P,根据前辈以及大牛们的建议,从for开始研究,这是纯P中最强已是最难的一个命令。
8楼的回答已经很明确,用纯P写一个通用的字符串处理程式,很难办到,起码对本人来说是这样的。
LZ是否又想重新亲近这个没规没矩、行为怪异,可爱又可怨的老不死?!

TOP

本帖最后由 Nsqs 于 2016-12-6 04:18 编辑
  1. ::on error resume next
  2. :sub class_bat
  3. echo off&cls
  4. cscript -nologo -e:vbs "%~0"
  5. pause
  6. exit sub
  7. :end sub
  8. set fso=createobject("scripting.filesystemobject")
  9. set regexp=new regexp
  10. File="123.txt"
  11. regexp.global=-1:regexp.ignorecase=-1
  12. regexp.pattern="([\u4e00-\u9fff0\w]*-{4}[\u4e00-\u9fff0\w]*-{4}).*(?==[\u4e00-\u9fff0\w]*)"
  13. read=fso.opentextfile(File).readall
  14. change=RegExp.Replace(read,"$1")
  15. wsh.echo "演示结果:"
  16. fso.createtextfile("new_"&File).write change
  17. wsh.echo change
  18. set fso=nothing:set regexp=nothing
复制代码
剔除A与B之间的字符串,不需要第三方.

TOP

回复 14# Nsqs

C:\新建文件夹\新建文件夹\批处理提取多个关键词行并按行排序输出 .bat(19, 5) Micros
oft VBScript 编译器错误: 无效的 'exit' 语句

请按任意键继续. . .



您这思路好像不太通用吧?遇到行内容形形色色的时候,就没法正常处理了吧?格式不固定,只要符合2个关键词,将之间的内容删除即可。

TOP

返回列表