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

[文本处理] [已解决]BAT批处理如何截取xx与xx之间的文本?

本帖最后由 rzzm 于 2014-4-25 20:57 编辑

我翻了一些帖子,发现下面这个我看得懂,也能改,不过他是删除之间的内容,我想把内容保存
  1. @set @n=0;/* & echo off
  2.     echo,1 删除“孤寂之狼”之前内容
  3.     echo,2 删除“97言情小说网”到“free97.cn”之间内容
  4.     echo,3 删除“收藏此书加入书签”之后内容
  5.     set /p Input=输入[1-3](默认3):
  6.     dir /b *.txt|cscript -nologo -e:jscript "%~0" "%Input%"
  7.     pause & exit/b & rem */
  8.     arg = WScript.Arguments(0);
  9.     fso = new ActiveXObject("Scripting.FileSystemObject");
  10.     while (!WSH.StdIn.AtEndOfStream) {
  11.         f = WSH.StdIn.ReadLine();
  12.         txt = fso.OpenTextFile(f,1).ReadAll();
  13.         if (arg == "1") {
  14.             txt = txt.replace(/[\s\S]*孤寂之狼/,"");
  15.         } else {
  16.             if (arg == "2") {
  17.                 txt = txt.replace(/97言情小说网[\s\S]*?free97\.cn/ig,"");
  18.             } else txt = txt.replace(/收藏此书加入书签[\s\S]*$/,"");
  19.         };
  20.         fso.OpenTextFile(f,2).Write(txt);
  21.     }
复制代码

请给出一段文本,并说清楚需要截取哪部分。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

#参考资料
#http://msdn.microsoft.com/zh-cn/library/system.string.aspx

# 1在powershell中,把文件打开为字符串,略。
#2删除“孤寂之狼”之前内容,设 字符串 = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书签ddd'
用indexof方法,来确定第一个【孤寂之狼】的位置,然后用substring方法,取子字符串。

powershell代码
  1. [string]$字符串 = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书签ddd'
  2. $关键字 = $字符串.indexof('孤寂之狼')
  3. $结果串 = $字符串.substring( $关键字 )
  4. $结果串
复制代码
# 3 删除“收藏此书加入书签” 之后的内容
用lastindexof方法,来确定追后一个一个【收藏此书加入书签】的位置,然后用substring方法,取子字符串。

powershell代码
看参考资料自己写写看?

# 4  删除“97言情小说网”到“free97.cn”之间内容
用indexof方法,来确定第一个【97言情小说网】的位置,
用lastindexof方法,来确定追后一个一个【free97.cn】的位置,
然后用substring方法,取2个子字符串,然后相加。

#5 取“97言情小说网”到“free97.cn”之间内容
用indexof方法,来确定第一个【97言情小说网】的位置,
用lastindexof方法,来确定追后一个一个【free97.cn】的位置,
然后用substring方法,取子字符串。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

假设截取 97言情小说网 到 free97.cn 字符之间的内容(不含 97言情小说网 和 free97.cn 字符):
  1. @set @n=0;/* & echo off
  2. dir /b *.txt|cscript -nologo -e:jscript "%~0"
  3. pause & exit/b & rem */
  4. fso = new ActiveXObject("Scripting.FileSystemObject");
  5. while (!WSH.StdIn.AtEndOfStream) {
  6.         f = WSH.StdIn.ReadLine();
  7.                 txt = fso.OpenTextFile(f, 1).ReadAll();
  8.                 s = "";
  9.                 re = /97言情小说网([\s\S]*?)free97\.cn/ig;
  10.                 while ((ar = re.exec(txt)) != null) {
  11.                         s += ar[1] + "\r\n";
  12.                 };
  13.         fso.OpenTextFile(f + ".log" ,2, true).Write(s);
  14. }
复制代码
1

评分人数

    • rzzm: 超棒!!技术 + 1

TOP

4楼的脚本超好用!
就是有一个情况,我的"lastindexof"字符是 ^$^

脚本识别不了,我的办法是用vbs弄了一个替换脚本,把 ^$^ 换成 ;

然后再用一个bat,然后把两个脚本按顺序放好,用Cscript和call调用

也非常感谢3楼,我也会研究一下powershell

TOP

回复 5# rzzm


    ^和$在js正则中属于特殊字符,需要转义。你可以把 free97\.cn 替换成 \^\$\^

TOP

太棒了!学到了

TOP

  1. [string]$字符串 = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书^$^签ddd'
  2. $关键字 = $字符串.lastindexof('^$^')
  3. $结果串 = $字符串.substring(0, $关键字 )   #取从开始到结束符
  4. $结果串
复制代码
返回
sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书
结论:
无需转义,用powershell太简单,更爽!!!
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

  1. str = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书^$^签ddd'
  2. s = str.substr(str.indexOf('孤寂之狼')+4)
  3. WScript.Echo(s.substr(0, s.lastIndexOf('^$^')))
复制代码
结论:真TMD简单,无需转义,爽歪歪

整天说这个语言低级,说那个脚本垃圾,逮着哪个贬哪个,狂妄自大,唯我独尊
如果能说到点子上,别人也就信了,关键是绝大多数时候就像在意淫、在胡说八道,还是版主咧,就这素质?
再说了,萝卜白菜,各有所爱,你玩你的ps,我玩我的bat,井水不犯河水
等哪天xp消失殆尽,不用你见天瞎嗷嗷,大伙自然会转向ps

也不是一无是处:
正因为有这种人,给死气沉沉的bathome增加点调味剂,也是好的。
“掌柜是一副凶脸孔,主顾也没有好声气,教人活泼不得;只有孔乙己到店,才可以笑几声,所以至今还记得。”
1

评分人数

    • CrLf: 请勿质疑某斑竹的素(ji)质(shu)嗯嗯~技术 + 1

TOP

返回列表