Board logo

标题: [文本处理] 求批处理对文本文件处理(已解决) [打印本页]

作者: pwq    时间: 2021-4-9 16:53     标题: 求批处理对文本文件处理(已解决)

本帖最后由 pwq 于 2021-4-9 22:28 编辑

向各位大师求个批处理,对文本文件进行批处理。上传示例如下:


东面的临髙方向传来了激烈的枪炮声。琼崖纵队立 即决定:迅速通知靠近临髙的澄迈县委,组织当地群众接应;部队赶往
一714
456一
一345一
响着枪炮声的地区;这边的战斗也要打下去,而且要不惜一切牺牲硬拼 硬冲,争取把守军缠在这里。


上传的文本文件示例内容共5行。其中第2行,第3行,第4行是数字行,并且在头部,尾部,左右两边有个“一”,这个“一”就是中文数字一二三四的一。
向大师们求个批处理,将第2行,第3行,第4行删除。谢谢大师们。
作者: qixiaobin0715    时间: 2021-4-9 18:58

本帖最后由 qixiaobin0715 于 2021-4-9 19:01 编辑
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.     for /f "tokens=1 delims=一" %%b in ("%%a") do (
  4.     echo,%%b|findstr /v /be [0-9]*>nul&&echo,%%a
  5.     )
  6. )
  7. pause
复制代码

作者: pwq    时间: 2021-4-9 20:51

谢谢2楼,您的批处理我已下载并试用,失败了。谢谢您。有一事不明,您上传窗口中有一段:delims=一"%%b,我复制下载后成.bat,这个  一  成了  һ ,不知怎么回事。但我即使将其改成  一  ,也还是失败了。
作者: qixiaobin0715    时间: 2021-4-9 21:05

本帖最后由 qixiaobin0715 于 2021-4-9 21:32 编辑

回复 3# pwq
中文处理有时会出问题,屏蔽一下
  1. @echo off
  2. set n=一个一个
  3. (for /f "delims=" %%a in (a.txt) do (
  4.     for /f "delims=0123456789" %%b in ("%%a") do (
  5.     if not "%%b"=="一" echo,%%a
  6.     )
  7. ))>b.txt
  8. pause
复制代码

作者: pwq    时间: 2021-4-9 21:20

4楼,您好,辛苦您了。您的第二个批处理我已下载试用,失败了。但我从显示的窗口中看到三个数字行已删除,但最后在文件中又出现了,看来要成功了,哪里还有差错,加油。
作者: qixiaobin0715    时间: 2021-4-9 21:32

回复 5# pwq
并没有差错,是你要加油学习批。批处理一般情况下,是生成新文件而不是修改源文件。重定向一下即可。已修改
作者: hlzj88    时间: 2021-4-9 21:49

  1. findstr /iv "一1 一2 一3 一4 一5 一6 一7 一8 一9 一0 0一 9一 8一 7一 6一 5一 4一 3一 2一 1一" 原文.txt>>结果.txt
复制代码
好处,这样写不费脑子。
作者: pwq    时间: 2021-4-9 22:26

谢谢6楼和7楼,谢谢二位大师。二位的杰作我都已下载试用,都成功了。6楼大师加了个定向,成功了。7楼大师的批处理更简单,马到成功,佩服佩服,向二位大师学习。谢谢二位的指点。
作者: pwq    时间: 2021-4-9 23:35

我重新麻烦二位大师,怪我粗心。我上传并以此为实验的示例文本中的一和数字间是没有空格符的,所以成功。我将二位的批处理用于真实的文本小说时,发现又不行了。后经观察,发现是一和数字间有隐藏的空格符,所以删除失败了。麻烦二位对批处理再修改一下,解决一和数字间有空格符的问题。谢谢二位。向二位大师学习。
作者: qixiaobin0715    时间: 2021-4-10 06:03

  1. @echo off
  2. set n=一个一个
  3. (for /f "delims=" %%a in (a.txt) do (
  4.     for /f "delims=一0123456789 " %%b in ("%%a") do (
  5.     if not "%%b#"=="#" echo,%%a
  6.     )
  7. ))>b.txt
  8. pause
复制代码

作者: xp3000    时间: 2021-4-10 08:09

  1. @set @n=0;/* & echo off
  2. dir /b *.txt|cscript -nologo -e:jscript "%~0" ""
  3. pause & exit/b & rem */
  4. arg = WScript.Arguments(0);
  5. fso = new ActiveXObject("Scripting.FileSystemObject");
  6. while (!WSH.StdIn.AtEndOfStream) {
  7.     f = WSH.StdIn.ReadLine();
  8.     txt = fso.OpenTextFile(f,1).ReadAll()
  9.     .replace(/\r\n一[0-9\r\n一]*一\r\n/mg,"");
  10.     fso.OpenTextFile(f,2).Write(txt);
  11. }
复制代码
这个直接修改不留换行
作者: newgain    时间: 2021-4-10 08:18

回复 7# hlzj88

请教下 findstr /iv 是findstr /i /v 合并的么
作者: pwq    时间: 2021-4-10 10:45

谢谢10楼和11楼二位大师的帮助。二位的批处理我已下载并试用。10楼的成功了。11楼的失败了。谢谢二位的鼎力相助,向二位大师学习。谢谢。
作者: xp3000    时间: 2021-4-10 12:17

我这里倒是成功,bat保存ANSI后变成UTF-8格式了,字符串也变了,
要处理的TXT文本是ANSI




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