[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何判断每行开头字符并在最前面添加对应字符?

本帖最后由 wh123wh123 于 2023-2-25 21:11 编辑

批处理如何判断文本文件A.txt里每行开头字符是否为关键词词并在其最前面添加对应的字符?
当该行内容最前面的字符为"FD"则在前面添加字符“8”
当该行内容最前面的字符为"k"则在前面添加字符“90”
当该行内容最前面的字符为“4”则在前面添加字符“0”,
当该行内容最前面的字符为“04”则在前面添加字符“0”,
例如A.txt内容如下:
4士大夫0   幅度是否      39239 23
FDDsdfsdf 分割地方 23232    4343443
0483728281922 33 401 0.9
KKJEsW 23  543123 554
处理并输出到B.txt后如下:
04士大夫0   幅度是否      39239 23
8FDDsdfsdf 分割地方 23232    4343443
00483728281922 33 401 0.9
90KKJEsW 23  543123 554
求完整批处理代码,谢谢老师

  1. @echo off
  2. for /f "delims=" %%a in ('type "A.txt"^| findstr /n .*') do (
  3. set "str=%%a"
  4. setlocal enabledelayedexpansion
  5. set "str=!str:*:=!"
  6. set n=
  7. if /i "!str:~0,2!" equ "FD" (
  8. set n=1 & echo 8!str!
  9. )
  10. if /i "!str:~0,1!" equ "k" (
  11. set n=1 & echo 90!str!
  12. )
  13. if /i "!str:~0,1!" equ "4" (
  14. set n=1 & echo 0!str!
  15. )
  16. if /i "!str:~0,2!" equ "04" (
  17. set n=1 & echo 0!str!
  18. )
  19. if not defined n echo,!str!
  20. endlocal
  21. )>>B.txt
  22. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2023-2-26 10:03 编辑

2楼代码已解决,试试别的思路。纯属练手,不必评分。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a #k=90,#4=0,#FD=8,#04=0
  4. (for /f "delims=" %%i in (A.txt) do (
  5.     set str=%%i
  6.     set str1=#!str:~,1!
  7.     set str2=#!str:~,2!
  8.     set /a "num1=#!str:~,1!","num2=#!str:~,2!"
  9.     if defined !str2! (
  10.         echo,!num2!%%i
  11.     ) else if defined !str1! (
  12.         echo,!num1!%%i
  13.     ) else (
  14.         echo,%%i
  15.     )
  16. ))>B.txt
  17. pause
复制代码
1

评分人数

    • wh123wh123: 感谢老师帮助,任意字符和位数都通用吗?技术 + 1

TOP

世上哪有完全通用的东西?具体问题具体分析而已。上面代码只是对要添加的字符是数字才有用,否则就要想别的办法。

TOP

回复 2# 77七


    改成 if ... else if ... 可以减少重复执行的次数
1

评分人数

    • wh123wh123: 感谢站长指点,爱论坛也爱老师们技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 77七 于 2023-2-27 18:56 编辑

回复 5# Batcher


   谢谢站长指点!
  1. @echo off
  2. for /f "delims=" %%a in ('type "A.txt"^| findstr /n .*') do (
  3.         set "str=%%a"
  4.         setlocal enabledelayedexpansion
  5.         set "str=!str:*:=!"
  6.         if /i "!str:~0,2!" equ "FD" (
  7.                 echo 8!str!
  8.         ) else if /i "!str:~0,1!" equ "k" (
  9.                 echo 90!str!
  10.         ) else if /i "!str:~0,1!" equ "4" (
  11.                 echo 0!str!
  12.         ) else if /i "!str:~0,2!" equ "04" (
  13.                 echo 0!str!
  14.         ) else (
  15.                 echo,!str!
  16.         )
  17.         endlocal
  18. )>>B.txt
  19. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2023-2-27 23:40 编辑

头部字段要适应不同字符和不同位数,须先建立一个类似字典的数表,如脚本代码中的listH变量值
其字典表结构:头部字段#前缀字段#头部字段位数 ...
其中分隔符#可选不常用的字符,但不能是for-in()默认的分隔符(空格逗号分号)
试试吧...
  1. @echo off
  2. set "listH=4#0#1 FD#8#2 04#0#2 K#90#1"
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%s in (a.txt) do (
  5.     set "str=%%s" &set "got=0"
  6.     for %%F in (%listH%) do (
  7.         for /f "tokens=1-3 delims=#" %%1 in ("%%~F") do (
  8.            if "!str:~,%%3!"=="%%1" (set "got=1" &echo,%%2%%s)
  9.         )
  10.     )
  11.     if !got! equ 0 (echo,%%s)
  12. ))>b.txt
  13. endlocal &exit/b
复制代码
2

评分人数

    • 77七: 感谢分享技术 + 1
    • wh123wh123: 通用于任意字符和位数吗?技术 + 1

TOP

备注》7楼代码已订正。

TOP

返回列表