Board logo

标题: [文本处理] BAT脚本如何批量处理文本把第二行内容添加到最后一行? [打印本页]

作者: bryant2009    时间: 2022-11-25 12:07     标题: BAT脚本如何批量处理文本把第二行内容添加到最后一行?

有一批文本类似下面内容:
3,6889.2222,1,1,面,,开发用地,,@
1,1,732.000,166.000
2,1,992.483,373.515
3,1,925.180,377.609
需要把第二行内容复制到最后一行,形成如下格式:
3,6889.2222,1,1,面,,开发用地,,@
1,1,732.000,166.000
2,1,992.483,373.515
3,1,925.180,377.609
1,1,732.000,166.000
希望各位大大能给个批处理,感激不尽!
之前参考了批量处理文本把第一行内容添加到最后一行
感谢!!!
原代码为:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4.     set /p firstLine=<"%%i"
  5.     type "%%i" >"%%i.new"
  6.     >>"%%i.new" echo,!firstLine!
  7.     move /y "%%i.new" "%%i"
  8. )
复制代码

作者: qixiaobin0715    时间: 2022-11-25 12:34

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  4.     (for /l %%i in (1,1,2) do set /p str=)<"%%a"
  5. >>"%%a" echo,!str!
  6. )
  7. pause
复制代码

作者: bryant2009    时间: 2022-11-25 12:53

回复 2# qixiaobin0715


    谢谢兄弟,感谢,搞定了
作者: bryant2009    时间: 2022-11-25 13:22

回复 2# qixiaobin0715


    如果是
有一批文本类似下面内容:
4,6889.2222,1,1,面,,开发用地,,@
1,1,732.000,166.000
2,1,992.483,373.515
3,1,925.180,377.609
4,1,732.000,166.000

把以上所有的txt最后一行的第一个序号,都改成1
结果:
4,6889.2222,1,1,面,,开发用地,,@
1,1,732.000,166.000
2,1,992.483,373.515
3,1,925.180,377.609
1,1,732.000,166.000

谢谢大大。
作者: bryant2009    时间: 2022-11-25 13:39

回复 2# qixiaobin0715


    也可以理解为,第二行替换最后一行。
作者: qixiaobin0715    时间: 2022-11-25 13:58

实际上,纯批并不善于处理这类文本修改的问题。给出单个文本修改方案,多个文件请自行修改,仅供参考:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=," %%i in (1.txt) do (
  4.     echo,!str!
  5.     set "str=%%i,%%j"
  6. )
  7. echo,1,!str:*,=!
  8. pause
复制代码
想要完美解决,还是等等大佬们吧。
作者: Batcher    时间: 2022-11-25 14:00

回复 1# bryant2009


对于1楼的需求:
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  5.     echo 正在处理文件:%%i
  6.     set "str="
  7.     (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  8.         if %%a equ 2 (
  9.             set "str=%%b"
  10.         )
  11.         echo,%%b
  12.     ))>"%%i.New"
  13.     >>"%%i.New" echo,!str!
  14.     move /y "%%i.New" "%%i"
  15. )
复制代码

作者: bryant2009    时间: 2022-11-25 14:04

回复 6# qixiaobin0715


    谢谢,我用别的软件加上您第一次给我的那个代码,同样也可以实现,谢谢
作者: bryant2009    时间: 2022-11-25 14:05

回复 7# Batcher


    第一个实现了,第二个,结合其他的软件也可以实现。如果能一步到位,那就更好了,也就是先把最后一行删掉,然后把第二行复制到最后一行。谢谢
作者: qixiaobin0715    时间: 2022-11-25 14:26

本帖最后由 qixiaobin0715 于 2022-11-25 14:40 编辑

未测试,应当是勉强能用:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  3.     setlocal enabledelayedexpansion
  4.     (for /f "tokens=1* delims=," %%i in ('type "%%a"') do (
  5.         if defined str echo,!str!
  6.         set "str=%%i,%%j"
  7.     )
  8.     echo,1,!str:*,=!)>temp.log
  9.     move /y "temp.log" "%%a">nul
  10.     endlocal
  11. )
  12. pause
复制代码

作者: bryant2009    时间: 2022-11-25 15:18

回复 10# qixiaobin0715


    感谢,现在在外面,回头测试,谢谢
作者: terse    时间: 2022-11-25 16:12

  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  3.      setlocal enabledelayedexpansion
  4.      >t.tt (for /f "usebackq delims=" %%i in ("%%a") do (
  5.                    if defined str (
  6.                       echo,!str!
  7.                       if not defined _str set "_str=%%i"
  8.                    )
  9.                    set "str=%%i"
  10.              )
  11.              echo,1,!_str:*,=!
  12.              )
  13.              move "t.tt" "%%a" >nul
  14.             endlocal
  15. )
  16. pause
复制代码

作者: bryant2009    时间: 2022-11-25 16:17

回复 12# terse


    谢谢
作者: bryant2009    时间: 2022-11-25 16:33

回复 7# Batcher


    谢谢版主,问题已解决。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2