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

[文本处理] 批处理如何将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

回复 1# Rasm


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

评分人数

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

TOP

回复 9# Rasm


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

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

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

TOP

若改成 二进制合并,则不受编码影响。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

  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. )
复制代码
没有测试过,麻烦看看效果,不行我再改

TOP

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

评分人数

    • Rasm: 感谢指导技术 + 1
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

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

回复 9# Rasm
你源文件是utf8,bat就保存为utf8并加上 chcp65001
1

评分人数

    • Rasm: 感谢指导技术 + 1

TOP

回复 8# went


    不行,中文的乱码啊,没办法出去到新文本

TOP

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

TOP

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

TOP

快十年了!

TOP

回复 5# Rasm


    试了下没问题呀,你是不是把源文件@符号删了,或者你把源文件打包传上来看看

TOP

回复 3# went


    你这个,全部变成两行了


所有数据就合并在2行

TOP

本帖最后由 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是新文件
1

评分人数

TOP

有个本办法:可以把读到的第一行放到一个临时文件,读到第二行时取回第一行,然后合并!

TOP

返回列表