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


给两个版本参考,用楼主提供的样本文件测试均予通过。
一。用sed.exe(从本站第三方工具可自由下载),简明利索,且不必过问文件编码问题,也许sed.exe默认继承源文件编码。
  1. @echo off
  2. for /f %%n in ('sed -n "$=" 1.txt') do set/a "n=%%n-4"
  3. sed "%n% r 2.txt" 1.txt>1.new.txt
复制代码
二。纯P的另一套思路。第3行获取1.txt总行数,第4行切出1.txt前段,第5行切出1.txt后段,第6行拼接各段合成结果。
  1. @echo off &setlocal enabledelayedexpansion
  2. chcp 65001>nul
  3. set "n=1" & for /f %%n in ('find /v /c "" ^<1.txt') do set/a "m=%%n-4"
  4. (for /f "delims=" %%s in (1.txt) do if !n! leq !m! (set/a "n+=1" & echo,%%s))>1.1
  5. more +!m! 1.txt>1.2
  6. copy /y 1.1+2.txt+1.2 1.new.txt>nul
  7. del /q 1.1 1.2 & chcp 936>nul & endlocal&exit/b
复制代码
1

评分人数

TOP

回复 17# yyz219

2.txt文件没有空行结尾所致。
代码加一句即可。
  1. @echo off
  2. for /f %%n in ('sed -n "$=" 1.txt') do set/a "n=%%n-4"
  3. echo,>>2.txt & sed "%n% r 2.txt" 1.txt>1.new.txt
复制代码
1

评分人数

    • yyz219: 如果要在第4行(不是倒数)插入,又应该怎么 ...技术 + 1

TOP


可请 findstr 露一手,先检测 2.txt 是否存在末尾空行,再选择sed方案而行。
假设要在第4行(不是倒数)插入...
  1. (findstr /v $ 2.txt>nul && (sed -e "5 s/^/\n/" -e "4 r 2.txt" 1.txt)||sed "4 r 2.txt" 1.txt)>1.new.txt
复制代码
1

评分人数

TOP

本帖最后由 aloha20200628 于 2024-1-28 11:27 编辑

回复 28# yyz219

goto方案适于大量复杂的作业调度,用于本例显得沉重了,不如以下代码简明利索...仅供参考。
  1. @echo off
  2. for /f %%n in ('sed -n "$=" 1.txt') do (set/a "n=%%n-4, m=n+1")
  3. (findstr /v $ 2.txt>nul && (sed -e "%m% s/^/\n/" -e "%n% r 2.txt" 1.txt)||sed "%n% r 2.txt" 1.txt)>1.new.txt
复制代码
1

评分人数

TOP

返回列表