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

[文本处理] 【已解决】如何利用bat在txt文本中添加特定字符,求学习!

还有一点小问题,已重新上传文本附件

文本内容里面介绍每个人物都有一个带有数字序号的小主题,如下,但是红色字体的序号前面是带有空格的,这些序号不是在行列的第一个字符位置,我测试了大家bat,都是无法识别到红色字体的这些序号,
1   李玟
     xxxx
2 沙宝亮
   xxxxxxx
  56    尚雯婕
    xxxxxxxx
177 陶喆
    xxxxxxxx
677 美国加利福尼亚
   xxxxxxxx

我想用批处理实现在数字序号前面加一个字符,如@@,最终效果为
@@1   李玟
     xxxx
@@2 沙宝亮
   xxxxxxx
@@56    尚雯婕
    xxxxxxxx
……

这个效果该如何编写bat代码...........只要添加字符的效果,不用写分割。

添加了特定的字符后,我想利用分割文本工具对文本进行提取特定字符来分割文件。每个文件只介绍一个人物。

回复 1# toyerspollors


    请找一个真实的文件压缩之后传上来以便测试代码。随意举例的文件,可能导致代码无法正常处理你真实的文件。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

在1楼已上传。。。。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%i in (歌手.txt)  do (
  3.      set "str=%%i"
  4.      set "s=!str:~,1!"
  5.      if !s! leq 9 for /f "tokens=* delims=0123456789" %%a in ("%%i")  do (
  6.             set "t=!str!"
  7.             for /l %%d in (0,1,9) do set "t=!t:%%d=!"
  8.             if  "%%a" == "!t!" set "str=@@%%i"
  9.     )
  10.     echo;!str!
  11. )
  12. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2021-1-11 09:39 编辑

回复 1# toyerspollors
不需要用什么文本分割器,直接批就可以啊:
  1. @echo off
  2. set n=false
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in (歌手.txt) do (
  5. set "str=%%a"
  6. for /f %%b in ("%%a") do echo %%b|findstr /be "[0-9][0-9]*">nul&&set n=true&&set "filename=!str: =!.txt"&&echo %%a>>!filename!||if !n!==true echo %%a>>!filename!
  7. )
  8. pause
复制代码

TOP

  1. @echo off
  2. pushd "%~sdp0"
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (0,1,9) do (set .%%a=1)
  5. (for /f "delims=" %%a in (歌手.txt) do (
  6.     set q=%%a
  7.     set w=!q:~0,1!
  8.     if defined .!w! (echo;@@%%a) else (echo;%%a)
  9. ))>歌手2.txt
  10. pause
复制代码

TOP

回复 1# toyerspollors


文本分割工具可以传百度云吗?

TOP

批处理如何区分数字是序号还是介绍中的数字呢?
感觉用VBS的正则式更简单,特点就是数字开头为识别就好了

TOP

谢谢各位老师指导,我先测试学习一下。。。。。。。

TOP

回复 6# 路过


修改成功导出后歌手2.txt,我打开后看到文本里面的空行不见了,如果我想保留空行的话该修改什么地方的代码呢?

另外如果文本中的序号是以下这两种类型,该如何编写bat?请老师指教!
第一章   李玟
第二十章 沙宝亮
第二百五十一章    尚雯婕

一   李玟
二十 沙宝亮
二百五十一    尚雯婕

TOP

回复 4# terse

老师,你这个只在终端显示结果,不能将结果保存为新文件呢。能修改一下吗?另外我也想保留文本中的空行。

TOP

回复 5# qixiaobin0715

老师这个厉害,直接帮分割了,就是分割出来的文件命名,能不能在序号后面加1-2个空格呢?如:1  李玟.txt

还有我发现了一个问题,文本中1  李玟这种空格字符的就能分割,如果是1 李玟这种空格字符的话是不能分割出来的,不知道需要修改什么地方的代码,请老师帮处理一下,谢谢!

TOP

回复 12# toyerspollors
未测试,自己试试看看还有什么问题:
  1. @echo off
  2. set n=false
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in (歌手.txt) do (
  5. for /f "tokens=1* delims=  " %%b in ("%%a") do echo %%b|findstr /be "[0-9][0-9]*">nul&&set n=true&&set "filename=%%b %%c.txt"&&echo %%a>>!filename!||if !n!==true echo %%a>>!filename!
  6. )
  7. pause
复制代码

TOP

回复 10# toyerspollors
第一种情况修改13楼代码:findstr /r "^第.*章$">nul试试。第二种自己琢磨。

TOP

实际上10楼第二种可以写一个非精确的代码,只是写出来太难看了,不好意思拿出来,还是期待高手吧。

TOP

返回列表