Board logo

标题: [文本处理] 批处理如何将txt文本的内容两行数合并成一行? [打印本页]

作者: Rasm    时间: 2020-3-4 19:50     标题: 批处理如何将txt文本的内容两行数合并成一行?

好孩子
haohaizi@qq.com
批处理
pichuli@163.com
网易
wangyi@126.com
搜狐
sohu@hotmail.com


成处理成如下,并导出到新文本

好孩子,haohaizi@qq.com
批处理,pichuli@163.com
网易,wangyi@126.com
搜狐,sohu@hotmail.com
作者: Gin_Q    时间: 2020-3-4 20:29

有个本办法:可以把读到的第一行放到一个临时文件,读到第二行时取回第一行,然后合并!
作者: went    时间: 2020-3-4 20:52

本帖最后由 went 于 2020-3-4 20:54 编辑
  1. @echo off
  2. (
  3. for /f "delims=" %%i in (0.txt) do echo %%i | findstr "@" >nul 2>nul && echo %%i || set /p="%%i,"<nul
  4. ) > new.txt
  5. pause
复制代码
0.txt是源文件,new.txt是新文件
作者: Rasm    时间: 2020-3-6 10:23

回复 3# went


    你这个,全部变成两行了


所有数据就合并在2行
作者: went    时间: 2020-3-6 11:18

回复 5# Rasm


    试了下没问题呀,你是不是把源文件@符号删了,或者你把源文件打包传上来看看
作者: Gin_Q    时间: 2020-3-6 12:25

快十年了!
作者: Rasm    时间: 2020-3-6 12:41

回复 5# went


源文件
  1.     061611ma----一星会员----注册时间:2019-07-30 01:44
  2. 0611ma----061611Ma----
  3. 369100l----一星会员----注册时间:2019-03-05 02:49
  4. 369100l----364100L----
  5. a10059581----一星会员----注册时间:2019-08-01 10:33
  6. a10059581----A15459581----
  7. a36987250----一星会员----注册时间:2019-03-13 19:30
  8. a36987250----A3698741250----
  9. a9520----一星会员----注册时间:2019-03-27 14:36
  10. a9520----A9520----
  11. as7433----一星会员----注册时间:2018-10-11 09:30
  12. as7433----As7433----
  13. bmaohulala----一星会员----注册时间:2019-03-15 18:23
  14. bmaohulala----Aa4219114----
  15. c877848----一星会员----注册时间:2019-03-07 05:33
  16. c877848----C877848----
  17. chyul998----一星会员----注册时间:2019-08-13 04:09
  18. chyul998----19528Cy----
  19. cwbs001----一星会员----注册时间:2019-07-28 00:27
  20. cwbs001----Jy032646----
复制代码

作者: went    时间: 2020-3-6 13:33

回复 7# Rasm
  1. for /f "delims=" %%i in (0.txt) do echo %%i | findstr "会员" >nul 2>nul && echo %%i || set /p="%%i,"<nul
复制代码
你改一下分隔符啊
代码也不看一下
作者: Rasm    时间: 2020-3-6 14:38

回复 8# went


    不行,中文的乱码啊,没办法出去到新文本
作者: went    时间: 2020-3-6 15:01

本帖最后由 went 于 2020-3-6 15:02 编辑

回复 9# Rasm
你源文件是utf8,bat就保存为utf8并加上 chcp65001
作者: xczxczxcz    时间: 2020-3-6 16:01

本帖最后由 xczxczxcz 于 2020-3-6 16:05 编辑

路过写一个
  1. [regex]::replace(((gc '.\0.txt' -enc utf8) -join "`r`n"),"([^`r`n]+)`r?`n([^`r`n]+`r?`n?)",'$1,$2')|sc '.\new.log';
复制代码

作者: wujunkai    时间: 2020-3-6 16:28

  1. @echo off
  2. @setlocal enabledelayedexpansion
  3. set /P fin=请输入读取的文件名
  4. set /P fout=请输入输出的文件名
  5. if not exist %fin% (
  6.     echo 文件不存在
  7.     exit /B
  8. )
  9. set "double=false"
  10. set "str="
  11. for /F "tokens=*" %%i in (%fin%) do (
  12.     if "!double!"=="false" (
  13.         set "str=%%i"
  14.         set "double=true"
  15.     ) else (
  16.         set "str=!str! , %%i"
  17.         set "double=false"
  18.         echo !str! >> %fout%
  19.     )
  20. )
复制代码
没有测试过,麻烦看看效果,不行我再改
作者: xczxczxcz    时间: 2020-3-6 16:39

若改成 二进制合并,则不受编码影响。
作者: Batcher    时间: 2020-3-6 19:04

回复 9# Rasm


参考 Q-05
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

打开原始txt
文件
另存为
选择 ANSI 编码
保存

再执行脚本试试
作者: Batcher    时间: 2020-3-6 19:53

回复 1# Rasm


推荐试试 sed 命令,写法比较简单:
  1. sed "$!N;s/\n/,/" "原文件.txt" > "结果.txt"
复制代码
http://bcn.bathome.net/s/tool/index.html?key=sed




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