标题: [文本处理] [已解决]BAT批处理如何截取xx与xx之间的文本? [打印本页]
作者: rzzm 时间: 2014-4-25 16:14 标题: [已解决]BAT批处理如何截取xx与xx之间的文本?
本帖最后由 rzzm 于 2014-4-25 20:57 编辑
我翻了一些帖子,发现下面这个我看得懂,也能改,不过他是删除之间的内容,我想把内容保存- @set @n=0;/* & echo off
- echo,1 删除“孤寂之狼”之前内容
- echo,2 删除“97言情小说网”到“free97.cn”之间内容
- echo,3 删除“收藏此书加入书签”之后内容
- set /p Input=输入[1-3](默认3):
- dir /b *.txt|cscript -nologo -e:jscript "%~0" "%Input%"
- pause & exit/b & rem */
- arg = WScript.Arguments(0);
- fso = new ActiveXObject("Scripting.FileSystemObject");
- while (!WSH.StdIn.AtEndOfStream) {
- f = WSH.StdIn.ReadLine();
- txt = fso.OpenTextFile(f,1).ReadAll();
- if (arg == "1") {
- txt = txt.replace(/[\s\S]*孤寂之狼/,"");
- } else {
- if (arg == "2") {
- txt = txt.replace(/97言情小说网[\s\S]*?free97\.cn/ig,"");
- } else txt = txt.replace(/收藏此书加入书签[\s\S]*$/,"");
- };
- fso.OpenTextFile(f,2).Write(txt);
- }
复制代码
作者: Batcher 时间: 2014-4-25 17:35
请给出一段文本,并说清楚需要截取哪部分。
作者: PowerShell 时间: 2014-4-25 18:43
#参考资料
#http://msdn.microsoft.com/zh-cn/library/system.string.aspx
# 1在powershell中,把文件打开为字符串,略。
#2删除“孤寂之狼”之前内容,设 字符串 = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书签ddd'
用indexof方法,来确定第一个【孤寂之狼】的位置,然后用substring方法,取子字符串。
powershell代码- [string]$字符串 = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书签ddd'
- $关键字 = $字符串.indexof('孤寂之狼')
- $结果串 = $字符串.substring( $关键字 )
- $结果串
复制代码
# 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方法,取子字符串。
作者: apang 时间: 2014-4-25 19:49
假设截取 97言情小说网 到 free97.cn 字符之间的内容(不含 97言情小说网 和 free97.cn 字符):- @set @n=0;/* & echo off
- dir /b *.txt|cscript -nologo -e:jscript "%~0"
- pause & exit/b & rem */
- fso = new ActiveXObject("Scripting.FileSystemObject");
- while (!WSH.StdIn.AtEndOfStream) {
- f = WSH.StdIn.ReadLine();
- txt = fso.OpenTextFile(f, 1).ReadAll();
- s = "";
- re = /97言情小说网([\s\S]*?)free97\.cn/ig;
- while ((ar = re.exec(txt)) != null) {
- s += ar[1] + "\r\n";
- };
- fso.OpenTextFile(f + ".log" ,2, true).Write(s);
- }
复制代码
作者: rzzm 时间: 2014-4-25 20:48
4楼的脚本超好用!
就是有一个情况,我的"lastindexof"字符是 ^$^
脚本识别不了,我的办法是用vbs弄了一个替换脚本,把 ^$^ 换成 ;
然后再用一个bat,然后把两个脚本按顺序放好,用Cscript和call调用
也非常感谢3楼,我也会研究一下powershell
作者: apang 时间: 2014-4-25 21:08
回复 5# rzzm
^和$在js正则中属于特殊字符,需要转义。你可以把 free97\.cn 替换成 \^\$\^
作者: rzzm 时间: 2014-4-26 00:10
太棒了!学到了
作者: PowerShell 时间: 2014-4-26 18:39
- [string]$字符串 = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书^$^签ddd'
- $关键字 = $字符串.lastindexof('^$^')
- $结果串 = $字符串.substring(0, $关键字 ) #取从开始到结束符
- $结果串
复制代码
返回
sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书
结论:
无需转义,用powershell太简单,更爽!!!
作者: apang 时间: 2014-4-26 23:16
- str = 'sdfsfsdf孤寂之狼aaa97言情小说网bbbfree97.cnccc收藏此书加入书^$^签ddd'
- s = str.substr(str.indexOf('孤寂之狼')+4)
- WScript.Echo(s.substr(0, s.lastIndexOf('^$^')))
复制代码
结论:真TMD简单,无需转义,爽歪歪
整天说这个语言低级,说那个脚本垃圾,逮着哪个贬哪个,狂妄自大,唯我独尊
如果能说到点子上,别人也就信了,关键是绝大多数时候就像在意淫、在胡说八道,还是版主咧,就这素质?
再说了,萝卜白菜,各有所爱,你玩你的ps,我玩我的bat,井水不犯河水
等哪天xp消失殆尽,不用你见天瞎嗷嗷,大伙自然会转向ps
也不是一无是处:
正因为有这种人,给死气沉沉的bathome增加点调味剂,也是好的。
“掌柜是一副凶脸孔,主顾也没有好声气,教人活泼不得;只有孔乙己到店,才可以笑几声,所以至今还记得。”
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |