Board logo

标题: [文本处理] (已解决)BAT批处理怎样实现两文本互相插入? [打印本页]

作者: BHsolve    时间: 2013-12-29 23:17     标题: (已解决)BAT批处理怎样实现两文本互相插入?

本帖最后由 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
少了最后两行这是为什么啊
作者: lifei259    时间: 2013-12-30 01:51

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

作者: terse    时间: 2013-12-30 03:00

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

作者: BHsolve    时间: 2013-12-30 10:33

回复 2# lifei259

我想要的不是怎么解决,而是代码为什么出错,再说哥们这最后的结果不是保存到n.txt了吗 。 — —
作者: BHsolve    时间: 2013-12-30 10:49

回复 3# terse

好多地方看不懂 — —
比如:
"%~1" == ""    '%~s0 :^|sort'

作者: BHsolve    时间: 2013-12-30 19:40

贴吧的人解决了删掉
if "!p!" geq 5 echo %%a
引号就好了


虽然我审错了题




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