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

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

[复制链接]
发表于 2023-2-25 20:35:37 | 显示全部楼层 |阅读模式
本帖最后由 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
求完整批处理代码,谢谢老师
发表于 2023-2-25 21:47:09 | 显示全部楼层
  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技术 +1 收起 理由
wh123wh123 + 1 谢谢帮助

查看全部评分

发表于 2023-2-26 09:16:42 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
wh123wh123 + 1 感谢老师帮助,任意字符和位数都通用吗?

查看全部评分

发表于 2023-2-27 16:11:57 | 显示全部楼层
世上哪有完全通用的东西?具体问题具体分析而已。上面代码只是对要添加的字符是数字才有用,否则就要想别的办法。
发表于 2023-2-27 16:26:22 | 显示全部楼层
回复 2# 77七


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

评分

参与人数 1技术 +1 收起 理由
wh123wh123 + 1 感谢站长指点,爱论坛也爱老师们

查看全部评分

发表于 2023-2-27 18:53:00 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
wh123wh123 + 1 再次感谢老师的帮助

查看全部评分

发表于 2023-2-27 22:56:15 | 显示全部楼层
本帖最后由 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技术 +2 收起 理由
77七 + 1 感谢分享
wh123wh123 + 1 通用于任意字符和位数吗?

查看全部评分

发表于 2023-2-27 23:45:51 | 显示全部楼层
备注》7楼代码已订正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 02:28 , Processed in 0.018466 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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