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

【练习-001】批处理实现两文本同行交替输出

[复制链接]
发表于 2011-4-2 12:47:31 | 显示全部楼层
41楼的改进思路,相信这能终结双文本同时输出的难题:
  1. @echo off
  2. findstr /n .* 1.txt>tmp1
  3. find /n /v "" 2.txt|more>tmp2 +2
  4. for /f "tokens=2*delims=]:" %%a in ('fc /lb1000 /n tmp1 tmp2^|sort') do echo;%%b
  5. del /q tmp?
  6. pause
复制代码
发表于 2011-4-11 18:11:25 | 显示全部楼层
49楼的代码刚看过
改了一个findstr
少了一个find
代码和思路都有创新
不过限于算法思想
对于两个以上的文本就无法实现交替输出了

另外
find /n /v "" 2.txt|more>tmp2 +2
可以改用
find /n /v "" <2.txt>tmp2
更好些
发表于 2011-4-11 20:05:30 | 显示全部楼层
好办法,避开了多余的显示,省一个more。
其实如果文件数是2的倍数,还是可以这样用的,不过效率就难说了
发表于 2011-4-11 20:24:49 | 显示全部楼层
楼上说的是递归算法吗?
也就是先a,c交替得到ac
再b,d交替得到bd
再ac,bd交替得到abcd
这是需要文件数是二的乘方吧

另外这只是原型代码
真正实用还要考虑一些细节
比如文本的末行没有\r\n
发表于 2011-7-18 20:23:37 | 显示全部楼层
本帖最后由 zm900612 于 2011-7-18 20:27 编辑
  1. @echo off
  2. (for /f "delims=" %%a in (1.txt) do (
  3.     endlocal
  4.     echo;%%a
  5.     setlocal enabledelayedexpansion
  6.     set /p t2=
  7.     if defined t2 echo;!t2!
  8. ))<2.txt>合并.txt
  9. ::由于可以有两个不同的输入来源并存,所以双文本合并就成为轻而易举的事了
复制代码

评分

参与人数 1技术 +1 收起 理由
bailong360 + 1 神来一笔

查看全部评分

发表于 2015-8-31 19:37:24 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /l %%a in (1,1,50) do set /p n%%a=)<1.txt
  3. (for /l %%a in (1,1,50) do set /p m%%a=)<2.txt
  4. for /l %%a in (1,1,50) do (
  5.     if not "!n%%a!"=="" echo;!n%%a!
  6.     if not "!m%%a!"=="" echo;!m%%a!
  7. )
  8. pause
复制代码
发表于 2018-9-5 23:07:48 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. cd /d %~dp0
  3. ::思路:通过行数定位结合more +n命令。
  4. set /a nn=0
  5. for /f "delims=" %%i in (1.txt) do (
  6.         echo;%%i
  7.         call :lp !nn! & set /a "nn+=1"

  8. )
  9. pause>nul & goto :eof


  10. :lp
  11. ::more 第一行是以0计数开始
  12. for /f "delims=" %%x in ('more +%1 2.txt') do echo;%%x & goto :eof




复制代码
发表于 2021-2-20 10:12:49 | 显示全部楼层
  1. @echo off
  2. set /a m=1000,n=1001
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in (a.txt) do set /a m+=2&set #!m!=%%a
  5. for /f "delims=" %%b in (b.txt) do set /a n+=2&set #!n!=%%b
  6. for /f "tokens=2 delims==" %%c in ('set #') do echo %%c
  7. pause
复制代码
发表于 2021-2-20 13:01:38 | 显示全部楼层
回复 1# batman


  这个问题我提问过的,版主用了5行代码就完成了工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:38 , Processed in 0.023770 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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