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

[文本处理] 关于Bat换行符"\n"的问题

[复制链接]
发表于 2017-12-14 18:21:51 | 显示全部楼层 |阅读模式
就比如说这个下载的lrc文件
文件名 中华人民共和国国歌.lrc
  1. {"songStatus":1,"lyricVersion":21,"lyric":"[by:NightSurround]\n[ti:]\r\n[ar:]\r\n[al:]\r\n[by:九九Lrc歌词网~www.99Lrc.net]\r\n[00:49.91]起来!\r\n[00:50.98]不愿做奴隶的人们!\r\n[00:53.97]把我们的血肉,\r\n[00:56.10]筑成我们新的长城!\r\n[01:00.17]中华民族到了\r\n[01:03.77]最危险的时候,\r\n[01:06.69]每个人被迫着\r\n[01:08.38]发出最後的吼声!\r\n[01:11.49]起来!\r\n[01:12.81]起来!\r\n[01:14.15]起来!\r\n[01:15.67]我们万众一心,\r\n[01:18.10]冒着敌人的炮火\r\n[01:20.70]前进,\r\n[01:22.14]冒着敌人的炮火\r\n[01:24.60]前进!\r\n[01:25.97]前进!\r\n[01:27.23]前进!进!\r\n","code":200}
复制代码
有没有办法用bat把"\r\n"这些换成真正的换行而不是这样子的形式,这难道要手动改???
发表于 2017-12-15 14:03:35 | 显示全部楼层
  1. @echo off
  2. cd.>output.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.         set "var=%%i"
  5.         setlocal enabledelayedexpansion
  6.         set var=!var:*:=!
  7.         set "var=!var:\r\n=$!"
  8.         set "var=!var:\n=$!"
  9.         :lp
  10.         set "str=!var:~0,1!"
  11.         set "var=!var:~1!"
  12.         if "!str!"=="$" (echo.>>output.txt) else (
  13.         set /p <nul ="!str!">>output.txt)
  14.         if "!var!" NEQ "" goto :lp
  15.         endlocal
  16. )
  17. pause
复制代码
测试结果:

评分

参与人数 1技术 +1 收起 理由
1332019995 + 1 如果文件比较大的话读取时间有点长,而且如果 ...

查看全部评分

 楼主| 发表于 2017-12-15 22:22:44 | 显示全部楼层
本帖最后由 1332019995 于 2017-12-15 22:23 编辑

回复 2# yhcfsr


    歌词里有空格转换之后就没了,怎么解决??
    比如说英文歌,转完之后空格都没了
发表于 2017-12-16 00:16:36 | 显示全部楼层
PowerShell "(type a.lrc) -split '\\r\\n|\\n'"
gawk "BEGIN{RS=\"(\\\\r)?\\\\n\"}{print}" a.lrc
发表于 2017-12-16 12:26:03 | 显示全部楼层
本帖最后由 yhcfsr 于 2017-12-17 02:09 编辑

回复 3# 1332019995


    更新版:
  1. @echo off&setlocal enabledelayedexpansion
  2. cd.>temp.txt
  3. for /f "delims=" %%a in ('type test.txt') do (
  4.         set /a num+=1
  5.         set "str=%%a"
  6.         set "str=!str:\r=!"
  7.         set "str=!str:\n=        !"       
  8.         call :lp %%str%%
  9. )
  10. goto :eof

  11. :lp
  12.         set var=%*
  13.         :lp1
  14.         for /f "tokens=1 delims=        " %%i in ("!var!") do (
  15.         echo %%i>>temp.txt
  16.         set "var=!var:%%i=        !"
  17.         if !var!. NEQ . (goto :lp1)
  18.         )
  19. goto :eof
复制代码
测试不会忽略空格,抛弃之前的思路,这个更清晰简单,处理速度比之前快了很多,至少你提供的样本是秒输入。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 03:25 , Processed in 0.018683 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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