[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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发放
百度里搜索到和这个一样的问题,希望帮助
论坛里搜索了好多也没有找到,百度里也没有找到,是不是以前好多帖子删除过?


所谓的爱纯P就是爱过来找人帮写代码。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

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

回复 18# pcl_test

是的,运行时看到在不停循环,心疼电脑啊,呵呵呵,关键是我不会套用,没做成通用的那种。例如设定文本名称和输出文本名称。

TOP

11楼纯P的思路就不错,利用偏移获取两个指定字符串在行中的位置,再利用截取拼接字符串的方式得到结果,只是没有注重效率,不论字符串长短都让for跑个八千多次

TOP

回复 16# wh1234567


    我的方法比楼上几位都好用,呵呵..你的意思你自己不会要怪别人不通用.代码贴出来自己不会改.写了十几行自己不会看还乱喷

TOP

4楼老师的思路很好,只是需要第三方程序而已

TOP

回复 14# Nsqs

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

请按任意键继续. . .



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

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

回复 12# wh1234567


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

TOP

回复 10# CommandBatCmd

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

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

回复 9# wh1234567


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

TOP

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

回复 8# CommandBatCmd


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

TOP

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

回复 7# wh1234567


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

TOP

回复 6# CommandBatCmd

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

TOP

返回列表