Board logo

标题: [文本处理] 批处理如何将文本内的逗号替换成换行符? [打印本页]

作者: Rasm    时间: 2012-10-23 19:42     标题: 批处理如何将文本内的逗号替换成换行符?

本帖最后由 pcl_test 于 2016-7-7 22:44 编辑

我的一个文本内容如下:

leoskylove, 朗里格郎, 快乐肥狼
gggmby, 阿南哥哥
yinxun506, 刘一辰007, 中山老郁, 过路385, 到处旅游, 陈龙64, 愚明, moluyi陌, 朗里格郎
池塘涟漪, 阿南哥哥, dww3418, 陈龙64, ysh116, 喜洋洋2008, 寿星老, bbg008, 老闵, sy0429, wzjmq
董玮, 晨晨乐乐
icepop
yellowstick
POP通城虎
tnt8000, 阿诺舒华辛力叻, freemores


我就是想将[,]换成换行符,处理后的文本变成:


leoskylove
朗里格郎
快乐肥狼
gggmby
阿南哥哥
yinxun506
刘一辰007
中山老郁
过路385
到处旅游
陈龙64
愚明
moluyi陌
朗里格郎
池塘涟漪
阿南哥哥



作者: Demon    时间: 2012-10-23 20:06

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set lf=^
  4. (for /f "delims=" %%i in (1.txt) do (
  5.     set "$=%%i"
  6.     for %%a in ("!lf!") do echo !$:, =%%~a!
  7. ))>2.txt
  8. pause
复制代码

作者: wc726842270    时间: 2012-10-24 05:30

即然如此,我就给出VBS的吧,不平不高,还请赏谅
PS:没有做任何的错误处理和检查
  1. Dim fso
  2. Set fso=CreateObject("scripting.filesystemobject")
  3. Set f_obj=fso.OpenTextFile("目标.txt",1)
  4. str=f_obj.ReadAll
  5. f_obj.close
  6. sarry=Split(str,", ")
  7. Set nf_obj=fso.openTextFile("new.txt",2,true)
  8. nf_obj.Write Join(sarry,vbcrlf)
  9. nf_obj.Close
  10. Set fso=nothing
复制代码
另外有个小精喜,没想到五笔的"code"就是"代码"
作者: Rasm    时间: 2012-10-24 13:13

回复 2# Demon


   为什么处理后用记事本打开看不到效果,而用写字板却可以
作者: CrLf    时间: 2012-10-25 03:13

回复 4# Rasm


    因为记事本认的是 回车符+换行符,小改如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%h in ('copy /z %0 nul') do set crlf=%%h^
  4. (for %%h in ("!crlf!") do (
  5.    for /f "delims=" %%b in (1.txt) do (
  6.       endlocal
  7.       set "str=%%b"
  8.       setlocal enabledelayedexpansion
  9.       echo !str:,=%%~h!
  10.    )
  11. ))>2.txt
  12. pause
复制代码

作者: wc726842270    时间: 2012-10-25 04:43

本帖最后由 wc726842270 于 2012-10-25 04:59 编辑

回复 5# CrLf


    真想到ZM /Z的用法都了解了,不过ENDLOCAL放在前面还是有些不谐调(我还以为忘了写了呢)COPY /Z %0 NUL 很有技术性
作者: forfiles    时间: 2012-10-25 10:08

  1. sed "s/,/\n/g" a.txt >b.txt
复制代码

作者: forfiles    时间: 2012-10-25 10:10

  1. gawk "gsub(/,/,\"\n\")" a.txt >b.txt
复制代码

作者: CrLf    时间: 2012-10-25 15:21

回复 6# wc726842270


    这个不是我发现的,得膜拜“怕老婆”兄:http://bbs.bathome.net/thread-12347-1-1.html
作者: wangxiaodong    时间: 2014-4-4 19:30

老大,for /f %%h in ('copy /z %0 nul') do set crlf=%%h^是啥意思?还有就是,enlocal有何用?5# CrLf
作者: DAIC    时间: 2014-4-4 20:27

回复 10# wangxiaodong


endlocal的作用:
http://bbs.bathome.net/thread-1224-1-1.html
作者: wangxiaodong    时间: 2014-4-4 20:46     标题: 标题

endlocal懂了,但'copy /z %0 和set crlf=%%h^不懂。好像copy没有/z参数啊nul'11# DAIC
作者: DAIC    时间: 2014-4-4 21:21

回复 12# wangxiaodong


  /Z           用可重新启动模式复制已联网的文件。
作者: wangxiaodong    时间: 2014-4-4 22:21

本帖最后由 wangxiaodong 于 2014-4-4 22:23 编辑

谢谢,就是不知道为啥要用for /f %%h in ('copy /z %0 nul') do set crlf=%%h^构造换行符5楼和2楼有什么不一样?13# DAIC
作者: CrLf    时间: 2014-4-6 23:40

回复 14# wangxiaodong


    2楼得到的是换行符,但win下某些软件(如记事本)分段时只认回车+换行,缺一不可。所以从 copy /z 的输出中获取一个回车符,拼起来就完整了
作者: wangxiaodong    时间: 2014-4-7 13:13

懂了,多谢!15# CrLf




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