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

[文本处理] [已解决]批处理中怎么使用for循环合并两个文本

我有两个文本
1.txt中有100多行,这里假设为4行,内容如下:

1.1
1.2
1.3
1.4

2.txt也假设为4行,内容如下:

2.1
2.2
2.3
2.4

我现在想把这两个文本合成一个,1.txt的第一行对应2.txt的第一行,中间有个空格,组成3.txt

1.1 2.1
1.2 2.2
1.3 2.3
1.4 2.4

这个该怎么实现  

我刚才写了个
for /f %%a in (2.txt) do (
for /f %%b in (1.txt) do echo “%%a %%b")
结果出现了16行   呵呵  

想问问各位大哥的意见

[ 本帖最后由 qxhonker 于 2009-3-3 14:35 编辑 ]
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1楼 的帖子

按照你写的 出现16行是因为当第一个for读取2.1时,要进入第二个for循环,也就是会依次读取1.1  1.2  1.3  1.4。显示是这样:
2.1 1.1
2.1 1.2
2.1 1.3
2.1 1.4
然后第一个for再读取2.2,之后进入第二个for的循环,也是依次读取1.1  1.2  1.3  1.4。显示:
2.2 1.1
2.2 1.2
2.2 1.3
2.2 1.4
……
后面也是这样,于是就产生了16行。
至于代码怎么改,我还不会,但是根据程序的算法,我想是这个原因……

TOP

楼上的   这个我当时也想到了为什么会出现16行 就是想不出来该怎么实现这个合并两个文本的问题

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set _%%a=%%b
  4. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do echo.!_%%a!%%b>>all.txt
  5. echo.&pause
复制代码
未考虑包含!和行首有:及文本长度不等的情况,同时未考虑大体积文本。
1

评分人数

命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

set /p 的用法之一:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (a.txt) do (
  4.     set /p str=
  5.     echo,!str! %%i
  6. ))<b.txt >c.txt
复制代码
  1. @echo off
  2. paste -d " " a.txt b.txt>c.txt
复制代码
第三方命令行工具paste.exe下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. set "MergeFile1=C:\test\a.txt"
  3. set "MergeFile2=C:\test\b.txt"
  4. set "MergeResult=C:\test\c.txt"
  5. set "MergeSkip=%temp%\AddNullRow.txt"
  6. echo.>"%MergeSkip%"
  7. type "%MergeFile2%">>"%MergeSkip%"
  8. (for /f "usebackq delims=" %%a in ("%MergeFile1%") do (
  9.     set /a n+=1
  10.     call :MergeColumn "%%a"
  11. ))>"%MergeResult%"
  12. goto :eof
  13. :MergeColumn
  14. for /f "usebackq skip=%n% delims=" %%a in ("%MergeSkip%") do (
  15.     echo.%~1 %%a
  16.     goto :eof
  17. )
复制代码
1

评分人数

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

TOP

谢谢版主和楼上的batcher大哥   看到batcher发的那些工具的帖子了  
我这个问题最后是用VBS处理的    BAT一时半会搞不出来就没搞了  后悔平时没好好学习呀

TOP

回复 7楼 的帖子

如果有人帮你解决了问题,建议进行以下操作:

1、修改帖子标题,在标题最前面注明:【已结】

2、给竭尽全力帮你的人、正确回答问题的人加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。

3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

呵呵  我就是在别的地方看到的最后要结帖的  所以来把我自己的结了
还有把我的VBS帖出来吧   写的乱  看的时候需要耐心
  1. Set fs = CreateObject("Scripting.FileSystemObject")
  2. Set file = fs.OpenTextFile("d:\1.txt", 1, false)
  3. Set fs1 = CreateObject("Scripting.FileSystemObject")
  4. Set file1 = fs1.OpenTextFile("d:\2.txt", 1, false)
  5. Set fs2 = CreateObject("Scripting.FileSystemObject")
  6. Set file2 = fs2.OpenTextFile("d:\3.txt", 8, 1)
  7. while not file.AtEndofStream
  8. readfile=file.readline
  9. readfile1=file1.readline
  10. file2.write "rename d:\1\"& readfile1 & " " & readfile &chr(13)&chr(10)
  11. wend
  12. file.close
  13. set fs=nothing
  14. file1.close
  15. set fs1=nothing
  16. file2.close
  17. set fs2=nothing
复制代码
1

评分人数

    • zm900612: 感谢分享解决方案技术 + 1

TOP

4# zqz0012005
第一个for执行完毕,按我的理解变量_%%a应该获取的是1.txt最后一行的文本内容。
第二个for中的变量!_%%a!竟然存储了1.txt中所有的文本内容,而且还是逐条释放出来。
_%%a 这个变量名究竟有什么玄机,大神能解释一下吗?

TOP

返回列表