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

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

就比如说这个下载的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"这些换成真正的换行而不是这样子的形式,这难道要手动改???

  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

评分人数

    • 1332019995: 如果文件比较大的话读取时间有点长,而且如果 ...技术 + 1

TOP

本帖最后由 1332019995 于 2017-12-15 22:23 编辑

回复 2# yhcfsr


    歌词里有空格转换之后就没了,怎么解决??
    比如说英文歌,转完之后空格都没了

TOP

PowerShell "(type a.lrc) -split '\\r\\n|\\n'"
gawk "BEGIN{RS=\"(\\\\r)?\\\\n\"}{print}" a.lrc

TOP

本帖最后由 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
复制代码
测试不会忽略空格,抛弃之前的思路,这个更清晰简单,处理速度比之前快了很多,至少你提供的样本是秒输入。

TOP

返回列表