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

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

本帖最后由 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
复制代码
1

评分人数

    • pcl_test: 发帖前先使用论坛搜索PB -4

gawk 发表于 2016-7-20 18:37



    可以了

TOP

  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

评分人数

Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 12# hmlstfqtl

2楼GNU的代码白写了

TOP

@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

这样改了 不行  重复输出很多遍

TOP

回复 10# hmlstfqtl

都说让你猜,你说少了什么

TOP

回复 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>

TOP

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

TOP

怎么输出到文本

TOP

本帖最后由 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. }
复制代码

TOP

本帖最后由 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>

TOP

回复 3# hmlstfqtl


编写文本处理类型的代码是一件非常严谨的事情,很难根据你瞎编的文本写出适合你的代码。
建议把原始文件和希望得到的文件打包压缩传上来。

TOP

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

TOP

GNU 发表于 2016-7-20 15:52



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

ttttttttttt
tttttttttttbbbbbbbb
ttttttttttt222222
tttttttttttbbbbbbbb
ttttttttttt

ttttttttttt
tttttttttttccccccc
ttttttttttt33333333
tttttttttttccccccccc
ttttttttttt

类似上面这样     tttttt都是固定的   加红的部分是文本内容

TOP

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

TOP

返回列表