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

[文本处理] 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. )
复制代码

  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
复制代码

TOP

回复 2# qixiaobin0715


    谢谢兄弟,感谢,搞定了

TOP

回复 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

谢谢大大。

TOP

回复 2# qixiaobin0715


    也可以理解为,第二行替换最后一行。

TOP

实际上,纯批并不善于处理这类文本修改的问题。给出单个文本修改方案,多个文件请自行修改,仅供参考:
  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
复制代码
想要完美解决,还是等等大佬们吧。

TOP

回复 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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6# qixiaobin0715


    谢谢,我用别的软件加上您第一次给我的那个代码,同样也可以实现,谢谢

TOP

回复 7# Batcher


    第一个实现了,第二个,结合其他的软件也可以实现。如果能一步到位,那就更好了,也就是先把最后一行删掉,然后把第二行复制到最后一行。谢谢

TOP

本帖最后由 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
复制代码

TOP

回复 10# qixiaobin0715


    感谢,现在在外面,回头测试,谢谢

TOP

  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
复制代码

TOP

回复 12# terse


    谢谢

TOP

回复 7# Batcher


    谢谢版主,问题已解决。

TOP

返回列表