Board logo

标题: [文本处理] [已解决]批处理对文件夹内按要求删除和重命名以处理句库 [打印本页]

作者: ax2623682    时间: 2009-4-22 15:04     标题: [已解决]批处理对文件夹内按要求删除和重命名以处理句库

我有一个复读软件,它可以生成句库,句库是一个个的mp3文件,这些mp3文件都是像这样命名的(我列举二组例子来说明),这个软件按lrc歌词文件的断点,用lrc句子的文本加上句子序号和复制序号,生成相应的mp3文件组,所有文件都在一个文件夹下。
这个软件命名和生成的规则是这样的:
所有文件在同一文件夹下
这个软件按组生成mp3文件,每组包含若干个句子
每个文件的命名规则是这样的:句子序号1(红色部分)+句子主体+句子序号2(红色部分)
例子一组:
01As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year  0.mp3
01As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year 1.mp3
01As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year  2.mp3
01As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year  3.mp3
01As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year  4.mp3
例子二组:
14'This is a private conversation!'0.mp3
14'This is a private conversation!'1.mp3
14'This is a private conversation!'2.mp3
14'This is a private conversation!'3.mp3
14'This is a private conversation!'4.mp3
我希望求一个批处理:
使得每组句子无论有几个都好,经过处理后,
(1)每组句子都只剩下一个句子(其余的都被删掉了),红色部分的句子序号都被去掉。
(2)注意到这个软件软件有一个bug,在句子序号2中,有些是空一格后再加(如例子组一),有些却不是(如例子组二),我想在,经过处理后,扩展名前面的空格都被去掉。
(3)这个软件有一个bug,转换后会把原文最后的句号去掉,所以要在表示扩展名的一点再加一点表示句号。
即是说最后,这两组文件会变为:

As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year..mp3
(注意到扩展名前空格没有了,也加上一个句号了)
'This is a private conversation!'..mp3
(注意到扩展名前空格没有了,也加上一个句号了)
作者: 随风    时间: 2009-4-22 15:23

两个句子序号中间的内容会出现数字吗?或者说肯定没有数字吗?
另外:重命名为 点点mp3 两个点,不会出错吗?前一个点应该是全角句号吧?

[ 本帖最后由 随风 于 2009-4-22 15:24 编辑 ]
作者: ax2623682    时间: 2009-4-22 15:26

原帖由 随风 于 2009-4-22 15:23 发表
两个句子序号中间的内容会出现数字吗?或者说肯定没有数字吗?
另外:重命名为 点点mp3 两个点,不会出错吗?前一个点应该是全角句号吧?


两个句子序号中间的内容会出现数字。两个点点的话我试过了,不会出错,我就是想要两个点点的哇。
作者: 随风    时间: 2009-4-22 15:39

两个句子序号中间的内容难道没有重复的吗?看你的列子是有重复的,这样重命名会出现重名错误,该怎么办?
句子2序号前面若有空格时,确定只有一个空格吗?
作者: ax2623682    时间: 2009-4-22 15:49

原帖由 ax2623682 于 2009-4-22 15:26 发表


两个句子序号中间的内容会出现数字。两个点点的话我试过了,不会出错,我就是想要两个点点的哇。


这个软件就是生成重复的句库,我的其中一个要求就是“每组句子都只剩下一个句子(其余的都被删掉了),红色部分的句子序号都被去掉。”,删掉重复的句子,最后保留一个就行。
作者: ax2623682    时间: 2009-4-22 15:51     标题: 回复 5楼 的帖子

也即是先删除后进行其他操作,总之最后,这两组文件会变为:
As Valentine’s Day approaches, lovers everywhere are preparing for the most romantic day of the year..mp3
(注意到扩展名前空格没有了,也加上一个句号了)
'This is a private conversation!'..mp3
(注意到扩展名前空格没有了,也加上一个句号了)
作者: tireless    时间: 2009-4-22 16:07

末尾的数字是否都只有一位?开头的数字是否只有两位

[ 本帖最后由 tireless 于 2009-4-22 16:11 编辑 ]
作者: 随风    时间: 2009-4-22 16:07

越来越糊涂了,难道你说的 例子一组、例子二组 这些内容是在一个文本里?
你的目的是先去掉这个文本中这些内容的序号及重复行?
作者: ax2623682    时间: 2009-4-22 16:24     标题: 大家都糊涂,发一个句库文件的截图

见顶楼

[ 本帖最后由 Batcher 于 2009-4-25 00:25 编辑 ]
作者: 随风    时间: 2009-4-22 16:42

以你顶楼截图的 I turned round again..mp3 为例
首先你的文件夹内有
11I turned round again 0.mp3
11I turned round again 1.mp3
11I turned round again 2.mp3
11I turned round again 3.mp3
11I turned round again 4.mp3
这5个mp3文件,重命名后就只有一个 I turned round again..mp3 文件了。
那么你一定是删除了4个文件,重命名了一个文件,是吗?
那么你是把这5个文件中的哪一个改了名呢?
作者: ax2623682    时间: 2009-4-22 16:51

原帖由 随风 于 2009-4-22 16:42 发表
以你顶楼截图的 I turned round again..mp3 为例
首先你的文件夹内有
11I turned round again 0.mp3
11I turned round again 1.mp3
11I turned round again 2.mp3
11I turned round again 3.mp3
11I turned ro ...


删掉了4个,重命名了一个。以顶楼截图为例子,重命名哪一个都无所谓,只要最后结果目录下有两个文件,这两个文件都符合要求就行了。谢谢你的耐心。谢谢你

[ 本帖最后由 ax2623682 于 2009-4-22 16:52 编辑 ]
作者: 随风    时间: 2009-4-22 17:43

未测试,测试时先备份所有文件。。切记。。。。。
:
  1. @echo off&set . .=a
  2. for /l %%a in (0 1 9) do set .%%a.=a
  3. for /f "delims=" %%a in ('dir/b/a-d *.mp3') do (
  4.    set "num=%%~na"&set "num2=%%a"
  5.    setlocal enabledelayedexpansion
  6.    call :loop1
  7.    if not exist "!Num!..mp3" (ren "!num2!" "!Num!..mp3") else (del /q "!num2!")
  8.    endlocal
  9. )
  10. pause&exit
  11. :loop1
  12.    set "var1=!num:~0,1!"
  13.    if defined .!var1!. set "num=!num:~1!"&goto loop1
  14. :loop2
  15.    set "var2=!num:~-1!"
  16.    if defined .!var2!. set "num=!num:~0,-1!"&goto loop2
  17. goto :EOF
复制代码

[ 本帖最后由 随风 于 2009-4-22 18:17 编辑 ]
作者: ax2623682    时间: 2009-4-22 17:54

原帖由 随风 于 2009-4-22 17:43 发表
未测试,测试时先备份所有文件。。切记。。。。。
echo off&set . .=a
for /l %%a in (0 1 9) do set .%%a.=a
for /f "delims=" %%a in ('dir/b/a-d *.mp3') do (
   set "num=%%~na"
   setlocal enabledela ...

1.高手你好,运行后显示“命令语法不正确”。
2.有一组句子没有修改。
作者: 随风    时间: 2009-4-22 17:56

12楼代码重新编辑过,你再重新复制代码,测试一次好吗
作者: ax2623682    时间: 2009-4-22 18:05

高手你好,已经测试了,请看
作者: 随风    时间: 2009-4-22 18:10     标题: 回复 15楼 的帖子

以找到原因,并修改了12楼的代码,你再试试。。。
作者: 随风    时间: 2009-4-22 18:17

又修改了一次,刚才漏了一个字符^_^
作者: ax2623682    时间: 2009-4-22 18:24

已经可以了,成功了,觉得版主你人很好,很有耐心。祝你心想事成。
作者: ax2623682    时间: 2009-4-22 18:27

再一次感谢版主




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