找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21315|回复: 7

[文本处理] 用BAT能不能处理这样格式的文本内容?

[复制链接]
发表于 2023-9-6 21:58:13 | 显示全部楼层 |阅读模式
原A.txt内容格式如下:

-------------第几情况-----------------------------
1--基础姓名
2--性别
3--年龄
4--职业
-------------情况说明----------------------------
5.--考分28
6.--面试
7.--不合格


要求通过批处理处理后效果如下并输出到B.txt里:

{-------------第几情况-----------------------------}
基础姓名:GTIOU(1,0,0);
性别:GTIOU(2,0,0);
年龄:GTIOU(3,0,0);
职业:GTIOU(4,0,0);
{-------------情况说明----------------------------}
考分28:GTIOU(5,0,0);
面试:GTIOU(6,0,0);
不合格:GTIOU(7,0,0);

也就是在每行的后面追加“:GTIOU(这里是每行最前面的数值,0,0);”把每行最前面的数字移动到括号里......以此类推
,希望老师用BAT写一个这个的功能的代码吧,谢谢了
发表于 2023-9-6 23:11:14 | 显示全部楼层
  1. @echo off
  2. set "file=1.txt"

  3. set a=(
  4. set b=)
  5. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do (
  6.         set str=%%b
  7.         setlocal enabledelayedexpansion
  8.         if "!str!" equ "" (
  9.                 echo=
  10.         ) else if "!str:~0,3!" equ "---" (
  11.                 echo {!str!}
  12.         ) else (
  13.                 echo !str!|findstr "^[0-9]" 1>nul && (
  14.                         for /f "tokens=1* delims=.-" %%c in ("!str!") do (
  15.                                 echo %%d:GTIOU!a!%%c,0,0!b!;
  16.                         )
  17.                 ) || echo !str!
  18.         )
  19.         endlocal
  20. ))>2.txt
  21. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
wh123wh123 + 1 乐于助人

查看全部评分

发表于 2023-9-6 23:37:14 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do echo %%i|findstr /i "情况"&&echo {%%i}>>b.txt || for /f "tokens=1,2 delims=.-" %%k in ('echo %%i') do echo %%l:GTIOU^(%%k,0,0^);>>b.txt
复制代码
仅以顶楼示例做了测试。
发表于 2023-9-7 00:05:55 | 显示全部楼层
  1. powershell -c "gc .\A.txt|%{if($_[0] -eq '-'){'{'+$_+'}'}else{$_.substring($_.LastIndexOf('-')+1)+':GTIOU('+$_[0]+',0,0);'}}>B.txt"
复制代码
发表于 2023-9-7 06:19:09 | 显示全部楼层
本帖最后由 Five66 于 2023-9-7 06:30 编辑

  1. @set @theCopyLeft=0;/* 0& echo off

  2. set "inflie=aaa.txt"
  3. set "outfile=bbb.txt"
  4. set "add=:GTIOU(数字,0,0);"

  5. type  "%inflie%" | cscript //nologo //e:jscript "%~f0" "%add%" >"%outfile%"
  6. echo done&pause&exit/b
  7. rem */

  8. var a,b=WScript.Arguments.Length?WScript.Arguments(0):":GTIOU(数字,0,0);";
  9. while (!WScript.StdIn.AtEndOfStream) {
  10. f = WScript.StdIn.ReadLine();
  11. if(!f){WScript.Echo(f);continue;}
  12. a=f.replace(/^(\d)+[.-]+/,'');
  13. if(f.substr(0,4)=="----")WScript.Echo('{'+f+'}');
  14. else if(RegExp.$1 && RegExp.$1 !='nil' && a)WScript.Echo(a+b.replace("数字",RegExp.$1));
  15. else WScript.Echo(f);
  16. "nil".replace(/(nil)/,"");
  17. }

复制代码
发表于 2023-9-7 07:03:59 | 显示全部楼层
  1. powershell -noprofile -executionpolicy bypass "gc a.txt|%%{if($_ -match '^-'){"{$_}"}else{$r=[regex]::Matches($_,'(\d+)\.?--(\D+)').groups;"$($r[2]):GTIOU($($r[1]),0,0);"}}" >b.txt
复制代码
发表于 2023-9-7 08:31:58 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-9-7 08:39 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=*" %%i in (a.txt) do (
  4.     set "n=%%i"
  5.     set /a "n=n"
  6.     if !n! equ 0 (
  7.         echo,%%i
  8.     ) else (
  9.         for /f "tokens=1* delims=.-" %%j in ("%%i") do (
  10.             echo,%%k:GTIOU(%%j,0,0^);
  11.         )
  12.     )
  13. ))>b.txt
  14. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
wh123wh123 + 1 乐于助人

查看全部评分

发表于 2023-9-7 12:51:38 | 显示全部楼层
回复 1# wh123wh123
也可以试一下gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe

  1. gawk -F"\\.?-- " "{if(/^-{8,}.+-{8,}$/){print"{" $0 "}"}else{print $2":GTIOU (" $1 ",0,0);"}}" a.txt>b.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:19 , Processed in 0.021508 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表