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

[文本处理] [已解决]批处理如何将文本内容按指定行号分行?

[复制链接]
发表于 2023-5-13 19:48:12 | 显示全部楼层 |阅读模式
本帖最后由 svh009 于 2023-5-13 20:54 编辑

假设在1.txt中,有类似以下的数据(仅举例,数据多少不确定)。
结构类似于 序号,文本。
  1. 0,孤勇者
  2. 1,人世间
  3. 2,从前说
  4. 5,错位时空
  5. 6,妈妈的话
复制代码
有什么方法可以将 序号+1 设置为行号,遇到缺失的空行进行填补并写入error作为文本。达到以下的效果并输出至2.txt
  1. 0,孤勇者
  2. 1,人世间
  3. 2,从前说
  4. error
  5. error
  6. 5,错位时空
  7. 6,妈妈的话
复制代码
求大佬救救!!用别的实现也行。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2023-5-13 19:49:21 | 显示全部楼层
本帖最后由 svh009 于 2023-5-13 19:51 编辑

如果去掉序号也行
  1. 孤勇者
  2. 人世间
  3. 从前说
  4. error
  5. error
  6. 错位时空
  7. 妈妈的话
复制代码
主要是保证行号和顺序要对
发表于 2023-5-13 20:25:28 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=," %%a in ('type "1.txt"') do (
  4.         set /a n=%%a+1
  5.         set #!n!=%%b
  6. )
  7. (for /l %%l in (1,1,%n%) do (
  8.         if "!#%%l!" equ "" (
  9.                 echo error
  10.         ) else (
  11.                 echo !#%%l!
  12.         )
  13. ))>2.txt
  14. endlocal
  15. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-5-13 20:36:54 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-5-14 08:32 编辑

思路大概是这样,未仔细推敲:
  1. @echo off
  2. set n=0
  3. setlocal enabledelayedexpansion
  4. (for /f "tokens=1* delims=," %%i in (1.txt) do (
  5.     set /a m=%%i-n
  6.     if !m! neq 0 (
  7.         set /a x=%%i-m
  8.         set /a y=%%i-1
  9.         for /l %%a in (!x!,1,!y!) do echo,error
  10.     )
  11.     echo,%%i,%%j
  12.     set /a n=%%i+1
  13. ))>2.txt
  14. pause
复制代码
代码第2行是设置初始行号,如果第一行初始数字是0就设为0,如果是1就设为1。

评分

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

查看全部评分

 楼主| 发表于 2023-5-13 20:49:08 | 显示全部楼层
回复 3# 77七 十分感谢
 楼主| 发表于 2023-5-13 20:52:18 | 显示全部楼层
回复 4# qixiaobin0715
十分感谢,楼上已经给出所需代码
还有这个代码运行会少掉相邻的error,导致缺失
  1. 0,孤勇者
  2. 1,人世间
  3. 2,从前说
  4. error
  5. 5,错位时空
  6. 6,妈妈的话
复制代码
发表于 2023-5-13 20:57:43 | 显示全部楼层
看到三楼的发出来了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=," %%i in (1.txt) do (
  3.      set _%%i=%%j
  4.      set n=%%i
  5. )
  6. for /l %%i in (0,1,!n!) do if defined _%%i (echo,%%i,!_%%i!) else echo,error
  7. pause
复制代码

评分

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

查看全部评分

发表于 2023-5-13 21:30:35 | 显示全部楼层
本帖最后由 tmplinshi 于 2023-5-13 21:48 编辑
  1. @echo off
  2. call :main "1.txt" > "2.txt"
  3. exit /b

  4. :main <inputFile>

  5.     setlocal
  6.     set "index="

  7.     for /f "delims=, tokens=1,* usebackq" %%i in ("%~1") do (

  8.         if not defined index (
  9.             set /a index = %%i
  10.         ) else (
  11.             set /a index += 1
  12.         )

  13.         setlocal enabledelayedexpansion
  14.         if "%%i" neq "!index!" (
  15.             set /a indexEnd = %%i - 1
  16.             for /l %%a in (!index!, 1, !indexEnd!) do echo error
  17.             endlocal & set /a index = %%i
  18.         ) else (
  19.             endlocal
  20.         )

  21.         echo %%i,%%j

  22.     )

  23.     exit /b
复制代码

评分

参与人数 2技术 +2 收起 理由
svh009 + 1 乐于助人
Batcher + 1 乐于助人

查看全部评分

发表于 2023-5-14 08:35:00 | 显示全部楼层
回复 6# svh009
经检查,代码第7行和第8行变量设置忘记加参数/a,已修改。
 楼主| 发表于 2023-5-14 10:08:10 | 显示全部楼层
回复 9# qixiaobin0715
十分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 22:45 , Processed in 0.023121 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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