Board logo

标题: [文本处理] [已解决]批处理删除lrc歌词文件后毫秒级时间标签的一位小数 [打印本页]

作者: ax2623682    时间: 2009-4-26 17:31     标题: [已解决]批处理删除lrc歌词文件后毫秒级时间标签的一位小数

批处理要求如下
我有一个lrc歌词文件,文件如下
--------------------------------我是分割线----------------------------------------------------------------
[ti:我爱bat]
[ar:bathome论坛]
[al:伟大的技术论坛]
[by:论坛可爱的版主]
[offset:0]
[Twilight:03.01.00]
[00:00.000]
[00:00.679]感谢bathome论坛对我的英语学习的支持
[00:02.483]如果过掉了四级,首先感谢bathome论坛的全体网友
[00:04.371]Is this your handbag?
[00:06.746]Pardon?
[00:08.997]Is this your handbag?
[00:12.185]Yes, it is.
[00:15.011]Thank you very much.
[00:17.530]
[00:18.390]
------------------------------------------我是分割线-----------------------------------------------------------------------------
批处理应该是这样编辑text.lrc的:
(1)搜寻批处理所在目录下,所有扩展名为的文件,用批处理对其进行处理。
(2)bat对所有这些文件进行处理后,输出为done_原文件名.lrc(即是在原文件名的基础上加上前缀done_)
  例如:批处理所在目录下,有一个文件是"单词.lrc",处理后,应该输出为"done_单词.lrc"

(3)大家看到,这个批处理的时间标签的最后小数点后都是三位的,如[00:12.185]中的185,可是我的mp4只支持小数点是两位的歌词,所有要把5删去(5这个位置代表毫秒,对歌词影响不大),时间标签就变成了[00:12.18],凡是遇到时间标签的话,都把小数点后第三位删去。
(4)[ti: [ar: [al: [by: [offset: 这五个标志符号和后面的内容都删掉(不管后面是什么)。
(5)[Twilight:03.01.00]这个标签删去。
(6)如果时间标签后没有内容的话,把这个标签删去,如[00:17.530]后没有内容就删除掉。
(7)用记事本打开这个歌词文件时,第一行在最顶行,没有空行。



即是:修改后的文件是这样的

------------------------------------------我是分割线------------------------------------------------------------------------------------
[00:00.67]感谢bathome论坛对我的英语学习的支持
[00:02.48]如果过掉了四级,首先感谢bathome论坛的全体网友
[00:04.37]Is this your handbag?
[00:06.74]Pardon?
[00:08.99]Is this your handbag?
[00:12.18]Yes, it is.
[00:15.01]Thank you very much.
----------------------------------------我是分割线--------------------------------------------------------------------------------------

我以前叫网友帮我写过一个文件,大家帮我看看能不能修改一下,这个文件只能针对名为text.lrc的文件
  1. @echo off
  2. set "hl=[ti: [ar: [al: [by: [offset: \[Twilight:03.01.00\]"
  3. (for /f "tokens=1* delims=[]" %%a in ('findstr /ibv "%hl%" "text.lrc"') do (
  4.    if not "%%b"=="" (
  5.       set "num=%%a"&set "var=%%b"
  6.       setlocal enabledelayedexpansion
  7.       set "var1=!var: =!"
  8.       if not "!var1!"=="" echo [!num:~,8!]!var!
  9.       endlocal
  10. )))>donetext.lrc
复制代码

[ 本帖最后由 ax2623682 于 2009-5-13 11:23 编辑 ]
作者: namejm    时间: 2009-4-26 18:46

1.搜寻批处理所在目录下,所有扩展名在bat处理范围内的文件。

  “所有扩展名在bat处理范围内的文件”是什么意思?请用准确的语言描述,不要让人摸不着头脑。
2.bat对所有这些文件进行处理后,输出为done_原文件名.对应的扩展名(即是在原文件名的基础上加上前缀done_)

  “对应的扩展名”是怎么对应的?请给出明确的说法。
作者: ax2623682    时间: 2009-4-26 21:26

原帖由 namejm 于 2009-4-26 18:46 发表

  “所有扩展名在bat处理范围内的文件”是什么意思?请用准确的语言描述,不要让人摸不着头脑。

  “对应的扩展名”是怎么对应的?请给出明确的说法。

1.搜寻批处理所在目录下,所有扩展名在bat处理范围内的文件。
  例如:第一个批处理里面,处理的特定文件是"我的单词学习.txt",修改后,第一个批处理将搜索批处理所在目下    的所有txt文件,用批处理对其进行处理。

2.bat对所有这些文件进行处理后,输出为done_原文件名.对应的扩展名(即是在原文件名的基础上加上前缀done_)
  例如:第一个批处理里面,处理的特定文件是"我的单词学习.txt",则对应的扩展名是txt。如果搜索到批处理所在目录下有一个文件是"单词.txt",处理后,应该输出为"done_单词.txt"

作者: ax2623682    时间: 2009-4-28 00:19

帖子已经重新编辑了,敬请高手过目。
作者: 随风    时间: 2009-4-28 00:35

考虑效率问题,还是创建一个临时文件来解决吧
注意:当前目录下不能有 temp 文件(无后缀名),否则会删除该文件。。。
  1. @echo off
  2. set "hl=[ti: [ar: [al: [by: [offset: [Twilight:03.01.00]"
  3. for %%i in (*) do (
  4.    findstr /ibv "%hl%" "%%i">temp
  5.    (for /f "tokens=1* delims=[]" %%a in (temp) do (
  6.       if not "%%b"=="" (
  7.          set "num=%%a"&set "var=%%b"
  8.          setlocal enabledelayedexpansion
  9.          set "var1=!var: =!"
  10.          if not "!var1!"=="" echo [!num:~,8!]!var!
  11.          endlocal
  12.       )
  13.    ))>"done_%%~nxi"
  14. )
  15. del /q temp
  16. pause
复制代码





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