Board logo

标题: [文本处理] 已解决 批处理怎么批量按照关键词更换txt小说的关键词 [打印本页]

作者: 8532200    时间: 2021-8-26 11:01     标题: 已解决 批处理怎么批量按照关键词更换txt小说的关键词

本帖最后由 8532200 于 2021-8-26 18:27 编辑

想在一个网站贴一些小说,因为网站有部分字会和谐,

因为txt很多章节,一个个使用txt文件替换软件效率太慢了。

所以想问怎么批处理替换文件夹下面的txt文件,



其中A.txt里面是需要更换的敏感字,

B.txt里面是更换后的敏感字


或者大神如果可以其他方法批量按照关键词替换也可以(关键词比较多)


两个txt会保证行数一致

求各位大神帮忙解决,

目前我是使用exe软件一个个替换的。。求帮忙
作者: qixiaobin0715    时间: 2021-8-26 15:27

本帖最后由 qixiaobin0715 于 2021-8-26 20:43 编辑

回复 1# 8532200
下面代码未经测试:
1.为了运行代码时,不会连敏感词文件一起被处理,先修改A.txt B.txt的扩展名,修改为A.log B.log。
2.如果代码运行没问题,只要敏感词文件无变化,保留运行代码产生的文件C.log。再次替换时,可将代码的4-7行删除后再运行。
  1. @echo off
  2. md LastFile
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%a in (A.log) do (
  5.     set /p str1=
  6.     echo,%%a=!str1!
  7. ))<B.log>C.log
  8. for %%i in (*.txt) do (
  9.     (for /f "delims=" %%j in ('findstr /n .* "%%i"') do (
  10.         set "str2=%%j"
  11.         for /f "delims=" %%k in (C.log) do set str2=!str2:%%k!
  12.         echo,!str2:*:=!
  13.     ))>"LastFile\%%i"
  14. )
  15. pause
复制代码
已修改
作者: 8532200    时间: 2021-8-26 15:45

回复 2# qixiaobin0715


    感谢大大的回复,我先去测试一下
作者: 8532200    时间: 2021-8-26 15:58

回复 2# qixiaobin0715


    测试回来了。

正常生成了C.LOG,但是没有成功。

新建了LastFile文件夹,但是里面是空白的,txt关键词也没被替换
作者: qixiaobin0715    时间: 2021-8-26 16:41

回复 4# 8532200
代码有点小问题,已修改,如果再不行的话,可将测试文本发到网盘中,我来测试看看。
作者: 8532200    时间: 2021-8-26 16:56

本帖最后由 8532200 于 2021-8-26 17:01 编辑

回复 5# qixiaobin0715


    测试了你新的代码,还是不行

已经上传去百度网盘。
你可以测试一下
关键词有很多,我只试了几个


链接: https://pan.baidu.com/s/1IJyPtnTzjAf_uudzcHFCEA 提取码: ym6b 复制这段内容后打开百度网盘手机App,操作更方便哦
作者: xp3000    时间: 2021-8-26 16:59

  1. //&cls&dir /b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     str = f.ReadAll()
  5.     .replace(/\r\n[   ]*/g, '\r\n  ') //行首两个空白
  6.     .replace(/^[  ]*\r\n/gm, '') //删除空白行
  7.     .replace(/加入书签.+下载错误举报[\r\n]+\s+/g, '  ') //部分无关内容
  8.     .replace(/^[  ]*/,"") //第X章前面删除
  9.     //删除加更
  10.     .replace(/[\((][^)\)]{0,9}第?[一二两三四五六七八九十○零百千0-91234567890]*更[^)\)]{0,9}[\))]/g, '')
  11.     //删除5行内PS:内容
  12.     .replace(/^[  ]*PS[::](.+\r?\n){1,5}(\r?\n)?$/gm, '\r\n')
  13.     .replace(/^[  ]*PS[::](.+\r?\n){1,5}(\r?\n)*([\s\t ]*第[一二两三四五六七八九十○零百千0-90-9]{1,12}[章].*\r?\n)/gm, '\r\n\r\n$2$3')
  14.     //(各种非指定字符串草替换肏,需要将下一行//.replace前面的//删除)
  15.     //.replace(/“([^墙头断肠割茅喂香杂小嫩青绿百牧狂本药甘干枯水花虫潦烟柴灯粮做])草([!。,?])/g, '“$1肏$2')
  16.     //各种非指定字符串操替换肏
  17.     .replace(/“([^早体贞风节情收练内棒洁做])操([!,?。])/g, '“$1肏$2')
  18.     .replace(/我[操草]你/g, '我肏你')
  19.     .replace(/[操草]你妈/g, '肏你妈')
  20.     .replace(/牛[bB逼]/g, '牛屄')
  21.     .replace(/装[bB逼]/g, '装屄')
  22.     .replace(/傻[bB逼]/g, '傻屄')
  23.     .replace(/([你我他她])妈[bB逼]/g, '$1妈屄')
  24.     .replace(/特么的/g, '他妈的')
  25.     .replace(/\*\*裸/g,"赤裸裸")
  26.     .replace(/([男女兽猎夫妇那])\*+([叫喊哭])/g,"$1人大$2")
  27.     .replace(/([海灵])\*+([易涉])/g,"$1**$2")
  28.     .replace(/\*+不离十/g,"八九不离十")
  29.     .replace(/十有\*?\*/g,"十有八九")
  30.     .replace(/天\*+美/g,"天性爱美")
  31.     .replace(/高\*+力/g,"高**力")
  32.     .replace(/洞\*+出/g,"洞内射出")
  33.     .replace(/洞\*+部/g,"洞穴内部")
  34.     .replace(/向\*+围/g,"向中心围")
  35.     .replace(/表\*+彩/g,"表**彩")
  36.     .replace(/消\*+影/g,"消失身影")
  37.     .replace(/开\*+流/g,"开**流")
  38.     .replace(/水\*+融/g,"水乳交融")
  39.     .replace(/一\*+日/g,"一**日")
  40.     .replace(/有\*?\*份/g,"有失身份")
  41.     .replace(/\*?\*凡胎/g,"肉体凡胎")
  42.     .replace(/滔天\*?\*/g,"滔天大波")
  43.     .replace(/纸张谈兵/g,"纸上谈兵")
  44.     .replace(/前车之签/g,"前车之鉴")
  45.     .replace(/之间其中/g,"只见其中")
  46.     .replace(/事有余辜/g,"死有余辜")
  47.     .replace(/嘎然而止/g,"戛然而止")
  48.     .replace(/千刀万剐一把/g,"千刀万剐一般")
  49.     .replace(/([白瞅瞧看]了[^ ,。、“”:;!?…]*一)样/g,"$1眼")
  50.     //尾行两个空格
  51.     .replace(/^([\S\s]*)(\r\n)$/gm, '$1$2$2');
  52.     f.Close();
  53.     var f = fso.opentextfile(file, 2);
  54.     f.Write(str);
  55. }
  56. var fso = new ActiveXObject('Scripting.FileSystemObject');
  57. while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码
我常用这样的,因几十KB,所以删减了
作者: 8532200    时间: 2021-8-26 17:03

我常用这样的,因几十KB,所以删减了
xp3000 发表于 2021-8-26 16:59



    非常感谢你的回复,但是你这个需要一个个替换你bat里面的关键词,我先等等看楼上的大大能不能按照AB的txt替换,那样的话更加快速
作者: xp3000    时间: 2021-8-26 17:08

本帖最后由 xp3000 于 2021-8-26 17:23 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%1 in (A.txt)do (set /a a+=1,b=0
  3. for /f "delims=" %%2 in (B.txt)do (set /a b+=1
  4.   if !a!==!b! echo     ^.replace^(^/%%1^/g, '%%2'^)>>wind.txt))
复制代码
A屏蔽字符,B修正字符,行对行,
处理后,添加BAT里面就行

(A所有*要转义,所有*替换为\*,其他特殊符号也要转义,放入//尾行两个空格上一行就行)

论坛不能使用,大和法;qing,还有se;口后面不能那个啥还好说,轮不知道后面为什么不能有大
作者: 8532200    时间: 2021-8-26 17:18

A屏蔽字符,B修正字符,行对行,
处理后,添加BAT里面就行
xp3000 发表于 2021-8-26 17:08



    测试一下,还是不行

提示

编译错误: 缺少 '/'


我没删除你上面任何一个字。

暂时不急,等等楼上大大的
作者: Batcher    时间: 2021-8-26 18:19

回复 6# 8532200


你把2楼代码第8行的第二个 in 改成 do 再试试

建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

如果你在执行.bat脚本,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

如果你在执行.ps1脚本,请参考:
http://bbs.bathome.net/thread-31071-1-1.html
作者: 8532200    时间: 2021-8-26 18:21

回复 11# Batcher


    好的,感谢版主的指教,我去试试
作者: 8532200    时间: 2021-8-26 18:25

回复 2# qixiaobin0715


    非常感谢你的帮忙。经过管理员的指点,目前实测已经成功。看看之后更多文件怎么样




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2