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

[文本处理] (已解决)BAT批处理怎样实现两文本互相插入?

[复制链接]
发表于 2013-12-29 23:17:15 | 显示全部楼层 |阅读模式
本帖最后由 BHsolve 于 2013-12-30 19:39 编辑

有两个文本如下(实际中并不知道两文本各有多少行):

文本1.txt

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ccccccccccccccccccccccccccccccccccccccc
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
ggggggggggggggggggggggggggggggggggggggg
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

文本2.txt

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

要求用批处理输出如下(两文本交替输出):

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
ccccccccccccccccccccccccccccccccccccccc
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ggggggggggggggggggggggggggggggggggggggg
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

要求:
1 尽量不生成临时文件
2 代码要高效
3 代码尽量简洁
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in (1.txt) do (
  4.         set /a p+=1
  5.         if "!p!" geq 5 echo %%a
  6.         for /f %%i in (2.txt) do (
  7.         set /a w+=1
  8.         if "!w!" equ "!p!" ( echo %%a && echo %%i)
  9.         )
  10. set w=
  11. )
  12. pause
复制代码
这套代码运行为什么失败,
显示的是:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
ccccccccccccccccccccccccccccccccccccccc
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ggggggggggggggggggggggggggggggggggggggg
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
少了最后两行这是为什么啊

评分

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

查看全部评分

发表于 2013-12-30 01:51:48 | 显示全部楼层
  1. @echo off
  2. for /f "delims=:" %%a in ('findstr/n . 1.txt') do set a=%%a
  3. for /f "delims=:" %%b in ('findstr/n . 2.txt') do set b=%%b
  4. if %a% geq %b% (set num=%a%) else (set num=%b%)
  5. set n=0
  6. :aaa
  7. for /f %%i in ('more +%n% 1.txt') do (echo,%%i>>n.txt&goto :1)
  8. :1
  9. for /f %%j in ('more +%n% 2.txt') do (echo,%%j>>n.txt&goto :2)
  10. :2
  11. set/a n+=1
  12. if %n% leq %num% goto :aaa
  13. pause

复制代码

评分

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

查看全部评分

发表于 2013-12-30 03:00:46 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%~1" == "" (
  3.    set "1.txt=a"&set "2.txt=b"
  4.    for /f "tokens=1*" %%i in ('%~s0 :^|sort') do echo;%%j
  5.    pause&exit
  6. ) else for /f "tokens=1,2* delims=:" %%a in ('findstr /n . 1.txt 2.txt') do (
  7.        set str=00000000%%b!%%a!
  8.        echo !str:~-8! %%c
  9. )
复制代码

评分

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

查看全部评分

 楼主| 发表于 2013-12-30 10:33:24 | 显示全部楼层
回复 2# lifei259

我想要的不是怎么解决,而是代码为什么出错,再说哥们这最后的结果不是保存到n.txt了吗 。 — —
 楼主| 发表于 2013-12-30 10:49:18 | 显示全部楼层
回复 3# terse

好多地方看不懂 — —
比如:
"%~1" == ""    '%~s0 :^|sort'
 楼主| 发表于 2013-12-30 19:40:42 | 显示全部楼层
贴吧的人解决了删掉
if "!p!" geq 5 echo %%a
引号就好了


虽然我审错了题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 22:36 , Processed in 0.033133 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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