标题: [文本处理] 关于Bat换行符"\n"的问题 [打印本页]
作者: 1332019995 时间: 2017-12-14 18:21 标题: 关于Bat换行符"\n"的问题
就比如说这个下载的lrc文件
文件名 中华人民共和国国歌.lrc- {"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"这些换成真正的换行而不是这样子的形式,这难道要手动改???
作者: yhcfsr 时间: 2017-12-15 14:03
- @echo off
- cd.>output.txt
- for /f "delims=" %%i in ('findstr /n .* test.txt') do (
- set "var=%%i"
- setlocal enabledelayedexpansion
- set var=!var:*:=!
- set "var=!var:\r\n=$!"
- set "var=!var:\n=$!"
- :lp
- set "str=!var:~0,1!"
- set "var=!var:~1!"
- if "!str!"=="$" (echo.>>output.txt) else (
- set /p <nul ="!str!">>output.txt)
- if "!var!" NEQ "" goto :lp
- endlocal
- )
- pause
复制代码
测试结果:
作者: 1332019995 时间: 2017-12-15 22:22
本帖最后由 1332019995 于 2017-12-15 22:23 编辑
回复 2# yhcfsr
歌词里有空格转换之后就没了,怎么解决??
比如说英文歌,转完之后空格都没了
作者: WHY 时间: 2017-12-16 00:16
PowerShell "(type a.lrc) -split '\\r\\n|\\n'"
gawk "BEGIN{RS=\"(\\\\r)?\\\\n\"}{print}" a.lrc
作者: yhcfsr 时间: 2017-12-16 12:26
本帖最后由 yhcfsr 于 2017-12-17 02:09 编辑
回复 3# 1332019995
更新版:- @echo off&setlocal enabledelayedexpansion
- cd.>temp.txt
- for /f "delims=" %%a in ('type test.txt') do (
- set /a num+=1
- set "str=%%a"
- set "str=!str:\r=!"
- set "str=!str:\n= !"
- call :lp %%str%%
- )
- goto :eof
-
- :lp
- set var=%*
- :lp1
- for /f "tokens=1 delims= " %%i in ("!var!") do (
- echo %%i>>temp.txt
- set "var=!var:%%i= !"
- if !var!. NEQ . (goto :lp1)
- )
- goto :eof
复制代码
测试不会忽略空格,抛弃之前的思路,这个更清晰简单,处理速度比之前快了很多,至少你提供的样本是秒输入。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |