Board logo

标题: [文本处理] 批处理怎样在文本中找出字符并提示? [打印本页]

作者: 灯塔彭于晏    时间: 2021-2-5 11:07     标题: 批处理怎样在文本中找出字符并提示?

先谢谢您了,祝您新年快乐。

现在有一个文本(已经上传到附件中),内容如下:
  1. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  2. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  3. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  4. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  5. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  6. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  7. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  8. 正常情况下的结构:[#人员信息 - [部分信!息] -  编号:82946905]
  9. 正常情况下的结构:[#人员信息 - 部分信!息 -  编号:82946905]
  10. <p><img src="https://gongsi.com/small/8A1050343.jpg"/></p>
  11. 正常情况下的结构:[#人员信息 - 部分信息] -  编号:82946905]
  12. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  13. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  14. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  15. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  16. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  17. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  18. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  19. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  20. 正常情况下的结构:[#人员信 - 息 - 部分信息 -  编号:82946905]
  21. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  22. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  23. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  24. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
复制代码
要求:
  1. 如果每行里出现2个以上的 - 符号就提示。(正常数量是2个,不能是1个或者3 4 5 ……个)!最好是能提示在XX行。
  2. 正常情况下的结构:[#人员信息 - 部分信息 -  编号:82946905]
  3. 如果每行里,除了开头和结尾的[ ] 以外,又出现了[ 或者 ] ,就提示在XX行。
  4. 比如(位置不固定,仅仅是举例。):
  5. [#人员信息 - [部分信息] -  编号:82946905]  
  6. 正常情况下的结构:
  7. [#人员信息 - 部分信息 -  编号:82946905]
  8. 如果每行内容中,small/81050343.jpg 中间的内容不是纯数字,就提示!
  9. 正常情况下的结构:
  10. <p><img src="https://gongsi.com/small/81050343.jpg"/></p>
  11. 不正常(有时候也有字符、汉字等……):
  12. <p><img src="https://gongsi.com/small/810A503V43.jpg"/></p>
复制代码
为了方便测试,我上传了文本在附件里,谢谢您了。
作者: went    时间: 2021-2-5 12:25

  1. //&cls&cd /d "%~dp0" & @cscript -E:javascript -Nologo "%~0" &pause&exit
  2. var txt = '222333.txt';
  3. var fso = new ActiveXObject('Scripting.FileSystemObject');
  4. var ifs = fso.OpenTextFile(txt,1);
  5. var lineNum=0,line,matchs;
  6. while(!ifs.AtEndOfLine){
  7. ++lineNum;
  8. line = ifs.ReadLine();
  9. //如果每行非2个 - 符号就提示
  10. matchs = line.match(/-/g);
  11. if(matchs != null && matchs.length != 2)
  12. WSH.Echo('' + lineNum + ':\t' + line);
  13. //如果每行里,除了开头和结尾的[ ] 以外,又出现了[ 或者 ] ,就提示
  14. if(line.match(/(?!^)[\[\]](?!$)/) != null)
  15. WSH.Echo('' + lineNum + ':\t' + line);
  16. //如果每行内容中,small/81050343.jpg 中间的内容不是纯数字,就提示!
  17. matchs = line.match(/small\/(.*?)\.jpg/);
  18. if(matchs != null && matchs[1] != null)
  19. if(!/^\d+$/.test(matchs[1]))
  20. WSH.Echo('' + lineNum + ':\t' + line);
  21. }
  22. ifs.Close();
复制代码

作者: 灯塔彭于晏    时间: 2021-2-5 13:10

回复 2# went


您好,就这么一直弹窗,内容有时候是正确的内容,有时候是需要纠错的错误格式的内容。

能否最后输出个TXT,逐行记录出错的内容所在的行数?
比如

end.txt里
  1. 第8行出现[ ]
  2. 第9行出现!
  3. 第X行出现非数字名……
复制代码

作者: went    时间: 2021-2-5 13:19

回复 3# 灯塔彭于晏

保存bat
作者: went    时间: 2021-2-5 13:28

写入end.txt
  1. //&cls&cd /d "%~dp0" & @cscript -E:javascript -Nologo "%~0" &pause&exit
  2. var txt = '222333.txt';
  3. var result = 'end.txt';
  4. var fso = new ActiveXObject('Scripting.FileSystemObject');
  5. var ifs = fso.OpenTextFile(txt,1);
  6. var ofs = fso.OpenTextFile(result,2,true);
  7. var lineNum=0,line,matchs,fmtLine;
  8. while(!ifs.AtEndOfLine){
  9. ++lineNum;
  10. line = ifs.ReadLine();
  11. //如果每行非2个 - 符号就提示
  12. matchs = line.match(/-/g);
  13. if(matchs != null && matchs.length != 2){
  14. fmtLine = '' + lineNum + ':\t非2个 - \t\t' + line;
  15. WSH.Echo(fmtLine);
  16. ofs.WriteLine(fmtLine);
  17. }
  18. //如果每行里,除了开头和结尾的[ ] 以外,又出现了[ 或者 ] ,就提示
  19. if(line.match(/(?!^)[\[\]](?!$)/) != null){
  20. fmtLine = '' + lineNum + ':\t出现了[,]\t\t' + line;
  21. WSH.Echo(fmtLine);
  22. ofs.WriteLine(fmtLine);
  23. }
  24. //如果每行内容中,small/81050343.jpg 中间的内容不是纯数字,就提示!
  25. matchs = line.match(/small\/(.*?)\.jpg/);
  26. if(matchs != null && matchs[1] != null)
  27. if(!/^\d+$/.test(matchs[1])){
  28. fmtLine = '' + lineNum + ':\t非纯数字\t\t' + line;
  29. WSH.Echo(fmtLine);
  30. ofs.WriteLine(fmtLine);
  31. }
  32. }
  33. ifs.Close();
复制代码

作者: qixiaobin0715    时间: 2021-2-5 15:42

回复 1# 灯塔彭于晏
来个纯批吧:
  1. @echo off
  2. set n=0
  3. setlocal enabledelayedexpansion
  4. (for /f "tokens=1* delims=!" %%a in (222333.txt) do (
  5.     set /a n+=1
  6.     if not "%%b"=="" echo,第!n!行有感叹号。
  7.     set "str1=%%a%%b"
  8.     for /f "tokens=1,2* delims=[" %%i in ("!str1!") do if not "%%k"=="" echo,第!n!行有多余中括号。
  9.     for /f "tokens=1-3* delims=-" %%m in ("!str1!") do if not "%%p"=="" echo,第!n!行有多余连接符。
  10.     if not "!str1:*small/=!"=="!str1!" (
  11.         set "str2=!str1:*small/=!
  12.         for /f "tokens=* delims=0123456789" %%x in ("!str2!") do (
  13.             set "str3=%%x"
  14.             if not "!str3:~0,1!"=="." echo,第!n!行有错误图片名!str2:~0,8!。
  15.         )
  16.     )
  17. ))>result.txt
  18. pause
复制代码





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