标题: [文本处理] [已解决]批处理中怎么使用for循环合并两个文本 [打印本页]
作者: qxhonker 时间: 2009-2-26 18:10 标题: [已解决]批处理中怎么使用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 编辑 ]
作者: nightwishfan 时间: 2009-2-26 19:38 标题: 回复 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行。
至于代码怎么改,我还不会,但是根据程序的算法,我想是这个原因……
作者: qxhonker 时间: 2009-3-2 11:32
楼上的 这个我当时也想到了为什么会出现16行 就是想不出来该怎么实现这个合并两个文本的问题
作者: zqz0012005 时间: 2009-3-2 12:10
- @echo off
- setlocal EnableDelayedExpansion
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set _%%a=%%b
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do echo.!_%%a!%%b>>all.txt
- echo.&pause
复制代码
未考虑包含!和行首有:及文本长度不等的情况,同时未考虑大体积文本。
作者: Batcher 时间: 2009-3-2 12:14
set /p 的用法之一:- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (a.txt) do (
- set /p str=
- echo,!str! %%i
- ))<b.txt >c.txt
复制代码
- @echo off
- paste -d " " a.txt b.txt>c.txt
复制代码
第三方命令行工具paste.exe下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: Batcher 时间: 2009-3-2 12:15
- @echo off
- set "MergeFile1=C:\test\a.txt"
- set "MergeFile2=C:\test\b.txt"
- set "MergeResult=C:\test\c.txt"
- set "MergeSkip=%temp%\AddNullRow.txt"
- echo.>"%MergeSkip%"
- type "%MergeFile2%">>"%MergeSkip%"
- (for /f "usebackq delims=" %%a in ("%MergeFile1%") do (
- set /a n+=1
- call :MergeColumn "%%a"
- ))>"%MergeResult%"
- goto :eof
- :MergeColumn
- for /f "usebackq skip=%n% delims=" %%a in ("%MergeSkip%") do (
- echo.%~1 %%a
- goto :eof
- )
复制代码
作者: qxhonker 时间: 2009-3-2 15:15
谢谢版主和楼上的batcher大哥 看到batcher发的那些工具的帖子了
我这个问题最后是用VBS处理的 BAT一时半会搞不出来就没搞了 后悔平时没好好学习呀
作者: Batcher 时间: 2009-3-3 15:30 标题: 回复 7楼 的帖子
如果有人帮你解决了问题,建议进行以下操作:
1、修改帖子标题,在标题最前面注明:【已结】
2、给竭尽全力帮你的人、正确回答问题的人加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。
3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。
作者: qxhonker 时间: 2009-3-3 15:59
呵呵 我就是在别的地方看到的最后要结帖的 所以来把我自己的结了
还有把我的VBS帖出来吧 写的乱 看的时候需要耐心- Set fs = CreateObject("Scripting.FileSystemObject")
- Set file = fs.OpenTextFile("d:\1.txt", 1, false)
- Set fs1 = CreateObject("Scripting.FileSystemObject")
- Set file1 = fs1.OpenTextFile("d:\2.txt", 1, false)
- Set fs2 = CreateObject("Scripting.FileSystemObject")
- Set file2 = fs2.OpenTextFile("d:\3.txt", 8, 1)
- while not file.AtEndofStream
- readfile=file.readline
- readfile1=file1.readline
- file2.write "rename d:\1\"& readfile1 & " " & readfile &chr(13)&chr(10)
- wend
- file.close
- set fs=nothing
- file1.close
- set fs1=nothing
- file2.close
- set fs2=nothing
复制代码
作者: Hello123World 时间: 2011-7-11 18:34
4# zqz0012005
第一个for执行完毕,按我的理解变量_%%a应该获取的是1.txt最后一行的文本内容。
第二个for中的变量!_%%a!竟然存储了1.txt中所有的文本内容,而且还是逐条释放出来。
_%%a 这个变量名究竟有什么玄机,大神能解释一下吗?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |