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

[文本处理] 【已解决】批处理如何将两个txt文本行行对应合并成一行

[复制链接]
发表于 2016-7-20 15:47:48 | 显示全部楼层 |阅读模式
本帖最后由 hmlstfqtl 于 2016-7-20 20:28 编辑

我用下面的代码  输出的结果有问题
a.txt 内容
aaaaaaa
bbbbbbbb
cccccccc
ddddddddd
eeeeeeee

b.txt内容
11111111
2222222
333333333
444444444
555555555

我想实现的是轮流输出
aaaaaaa 11111111
bbbbbbbb 2222222
cccccccc 333333333
ddddddddd 444444444
eeeeeeee 555555555



结果却变成
aaaaaaa 11111111
aaaaaaa 2222222
aaaaaaa 333333333
aaaaaaa 444444444
aaaaaaa 555555555
bbbbbbbb 11111111
bbbbbbbb 2222222
bbbbbbbb 333333333
bbbbbbbb 444444444
bbbbbbbb 555555555
cccccccc 11111111
cccccccc 2222222
cccccccc 333333333
cccccccc 444444444
cccccccc 555555555
ddddddddd 11111111
ddddddddd 2222222
ddddddddd 333333333
ddddddddd 444444444
ddddddddd 555555555
eeeeeeee 11111111
eeeeeeee 2222222
eeeeeeee 333333333
eeeeeeee 444444444
eeeeeeee 555555555


代码是这个
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do for /f "delims=" %%j in (b.txt) do echo %%i %%j>>c.txt
  3. pause
复制代码

评分

参与人数 1PB -4 收起 理由
pcl_test -4 发帖前先使用论坛搜索

查看全部评分

发表于 2016-7-20 15:52:55 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2016-7-20 16:11:45 | 显示全部楼层
GNU 发表于 2016-7-20 15:52



    如果我想生成其他格式的呢?
ttttttttttt
tttttttttttaaaaaaa
ttttttttttt11111111
tttttttttttaaaaaaa
ttttttttttt

ttttttttttt
tttttttttttbbbbbbbb
ttttttttttt222222
tttttttttttbbbbbbbb
ttttttttttt

ttttttttttt
tttttttttttccccccc
ttttttttttt33333333
tttttttttttccccccccc
ttttttttttt

类似上面这样     tttttt都是固定的   加红的部分是文本内容
发表于 2016-7-20 16:24:43 | 显示全部楼层
回复 1# hmlstfqtl

第三方http://www.bathome.net/s/tool/index.html?down&key=gawk
  1. gawk "NR==FNR{a[NR]=$0;next}{print a[++i],$0}" "1.txt" "2.txt">"3.txt"
复制代码
发表于 2016-7-20 16:30:13 | 显示全部楼层
回复 3# hmlstfqtl


编写文本处理类型的代码是一件非常严谨的事情,很难根据你瞎编的文本写出适合你的代码。
建议把原始文件和希望得到的文件打包压缩传上来。
 楼主| 发表于 2016-7-20 16:42:40 | 显示全部楼层
本帖最后由 hmlstfqtl 于 2016-7-20 16:44 编辑

回复 5# GNU

文本a.txt
167.229.78.106
167.229.78.107
167.229.78.108
167.229.78.109
167.229.78.110

文本b.txt
t1
t2
t3
t4
t5


生成下面这样的
<VirtualHost 167.229.78.106>
DocumentRoot C:/xampp/htdocs/t1
ServerName 167.229.78.106
</VirtualHost>

<VirtualHost 167.229.78.107>
DocumentRoot C:/xampp/htdocs/t2
ServerName 167.229.78.107
</VirtualHost>
发表于 2016-7-20 17:02:33 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-21 00:13 编辑

回复 6# hmlstfqtl
  1. //&cls&cscript -nologo -e:jscript "%~f0" "1.txt" "2.txt"&pause&exit
  2. var str = '<VirtualHost {0}>\r\nDocumentRoot C:/xampp/htdocs/{1}\r\nServerName {0}\r\n</VirtualHost>';
  3. var fso =  new ActiveXObject('Scripting.FileSystemObject');
  4. var f1 = fso.OpenTextFile(WSH.Arguments(0), 1);
  5. var f2 = fso.OpenTextFile(WSH.Arguments(1), 1);
  6. var txt = f1.ReadAll().split(/[\r\n]+/), i=0;
  7. while(!f2.AtEndOfStream){
  8.     WSH.echo(str.replace(/\{0\}/g, txt[i]).replace(/\{1\}/, f2.ReadLine())+'\r\n');
  9.     i++;
  10. }
复制代码
 楼主| 发表于 2016-7-20 17:09:38 | 显示全部楼层
怎么输出到文本
发表于 2016-7-20 17:20:11 | 显示全部楼层
回复 8# hmlstfqtl

你猜
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('type "1.txt"') do (
  4.     set /p str=
  5.     echo;^<VirtualHost %%i^>
  6.     echo;DocumentRoot C:/xampp/htdocs/!str!
  7.     echo;ServerName %%i
  8.     echo;^</VirtualHost^>
  9.     echo;
  10. )<"2.txt"
  11. pause
复制代码
 楼主| 发表于 2016-7-20 17:31:38 | 显示全部楼层
回复 9# pcl_test


    你这个不行啊         2.txt的内容只有第一行

<VirtualHost 167.229.78.106>
DocumentRoot C:/xampp/htdocs/t1
ServerName 167.229.78.106
</VirtualHost>

<VirtualHost 167.229.78.107>
DocumentRoot C:/xampp/htdocs/t1
ServerName 167.229.78.107
</VirtualHost>
发表于 2016-7-20 17:36:04 | 显示全部楼层
回复 10# hmlstfqtl

都说让你猜,你说少了什么
 楼主| 发表于 2016-7-20 17:50:26 | 显示全部楼层
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type "1.txt"') do (
for /f "delims=" %%j in ('type "2.txt"') do (
    echo;^<VirtualHost %%i^>
    echo;DocumentRoot C:/xampp/htdocs/%%j
    echo;ServerName %%i
    echo;^</VirtualHost^>
    echo;
)
)
pause

这样改了 不行  重复输出很多遍
发表于 2016-7-20 17:58:00 | 显示全部楼层
回复 12# hmlstfqtl

2楼GNU的代码白写了
发表于 2016-7-20 18:37:08 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (a.txt) do (
  4.     set /p str=
  5.     echo ^<VirtualHost %%i^>
  6.     echo DocumentRoot C:/xampp/htdocs/!str!
  7.     echo ServerName %%i
  8.     echo ^</VirtualHost^>
  9. ))<b.txt >c.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
smss + 1 学习

查看全部评分

 楼主| 发表于 2016-7-20 20:27:46 | 显示全部楼层
gawk 发表于 2016-7-20 18:37



    可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 12:39 , Processed in 0.022638 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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