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

[文本处理] 再次请教文件部分字符替换的批处理?

karaoke.tag('歌名', '五月的鲜花');
karaoke.tag('缩写', 'WYDXH');
karaoke.tag('歌手', '红兰');
karaoke.tag('字数', '5');
karaoke.tag('语种', '国语');
karaoke.tag('歌类', '男人');
karaoke.tag('电影', 'False');
karaoke.tag('风格', '流行');
karaoke.tag('流行', 'True');
karaoke.tag('音量', '200');
karaoke.tag('声道', '2');
karaoke.tag('语音', '0');
karaoke.tag('介质', '10');
karaoke.tag('时间', '2008-9-5');
karaoke.tag('歌星拼音', '');
karaoke.mtvmode :=true;
karaoke.videofilename := '';
karaoke.audiofilename := '*.wav';
karaoke.XSDVideoMode := 4;
karaoke.CommonVideo := '100484.mpg';

请问如何将最后一行中“100484”替换为第一行中的“五月的鲜花”,这是一堆文件,需要一个批处理程序。请帮忙。.改完应成这样:
karaoke.tag('歌名', '五月的鲜花');
karaoke.tag('缩写', 'WYDXH');
karaoke.tag('歌手', '红兰');
karaoke.tag('字数', '5');
karaoke.tag('语种', '国语');
karaoke.tag('歌类', '男人');
karaoke.tag('电影', 'False');
karaoke.tag('风格', '流行');
karaoke.tag('流行', 'True');
karaoke.tag('音量', '200');
karaoke.tag('声道', '2');
karaoke.tag('语音', '0');
karaoke.tag('介质', '10');
karaoke.tag('时间', '2008-9-5');
karaoke.tag('歌星拼音', '');
karaoke.mtvmode :=true;
karaoke.videofilename := '';
karaoke.audiofilename := '*.wav';
karaoke.XSDVideoMode := 4;
karaoke.CommonVideo := '五月的鲜花.mpg';
具体操作时发现,第一行的内容有时不在第一行,并且最后一行的数字也不是同样的位数,有的5位,有的6位,有的3位,请问该如何修改代码?

修改了一下代码:
setlocal enabledelayedexpansion
for %%k in (*.ksc) do (
 for /f "tokens=4 delims='" %%m in ('findstr 歌名 "%%k"') do (
 set name=%%m
  echo %%m
   for /f "usebackq delims=;" %%i in ("%%k") do (
            set "mark=%%i"&set "mark=!mark:~-4,3!"echo !mark!
            if not "!mark!"=="mpg" (echo %%i;>>#%%k) else (
                       echo karaoke.CommonVideo := '!name!.mpg';>>#%%k
                       ))))
pause

第一个问题处理好了,就是最后的位数不知如何处理,还有就是空行如何处理?就是说,空行原模原样的复制到新文件中。

[ 本帖最后由 mrhxn 于 2009-9-27 18:53 编辑 ]

经过操作后,只有一问题。空行如何处理,就是说,空行原模原样的复制到修改后的文件中。

TOP

不要重复发帖,建议到第一个帖子修改更新,还有,你说你会注意自己的描述。我看你根本就没有。“具体操作时发现,第一行的内容有时不在第一行”,什么叫第一行的内容有时不在第一行?让人看了只能无语。要知道有时候论坛的牛人往往不是被题目难住了,而是题目没看完就被你们的语言杀了一堆脑细胞,汗……
Still with wax

TOP

你的问题同样比较好处理,而且最后一行的数字不管它有几位数,都无所谓,因为我的代码不是根据数位来走的,是根据特定字符的。就像你现在要求的,也必须要通过特定字符“歌名”来过滤。你自己先反省一下吧。说得比较啰嗦还请楼主见谅,都是为了论坛和大家共同的学习环境。
Still with wax

TOP

因为原帖已经完成,所以发了一贴,其实只有一个问题,就是空行如何处理?空行原模原样的复制到修改后的文件中

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.       for /f "tokens=4 delims=" %%m in ('findstr 歌名 "%%k"') do set name=%%m
  4.       for /f "usebackq tokens=1* delims=:" %%i in (`findstr /n .* %%a`) do (
  5.             set "tail=%%j"&set "mark=!tail:~-5,3!"
  6.             if not "!mark!"=="mpg" (echo.%%j>>#%%a) else (
  7.                        echo karaoke.CommonVideo := '!name!.mpg';>>#%%a
  8.                        )))
  9. pause
复制代码
未测试,仅供参考
Still with wax

TOP

差了几个代码,经修改如下,可以实现:
  1. setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.       for /f "tokens=4 delims='" %%m in ('findstr 歌名 "%%a"') do (
  4.       set name=%%m
  5.       for /f "usebackq tokens=1* delims=:" %%i in (`findstr /n .* %%a`) do (
  6.             set "tail=%%j"&set "mark=!tail:~-5,3!"
  7.             if not "!mark!"=="mpg" (echo.%%j>>#%%a) else (
  8.                        echo karaoke.CommonVideo := '!name!.mpg';>>#%%a
  9.                        ))))
  10. pause
复制代码
谢谢不厌其烦的解答。因为是初学,所以不对的地方,还请谅解。另外,能请讲一下tail的意思吗?

[ 本帖最后由 mrhxn 于 2009-9-27 18:51 编辑 ]

TOP

回复 7楼 的帖子

没事,你能自己修改代码就说明很主动,这样很好。至于回答问题,大家都是相互学习,共同进步。tail是判断最后一行倒数第五个字符起取三个字符是不是mpg,因为整个文本中之后最后一行有这三个字符,所以可以用来作为标志判断。里面还有commonvideo也是一个标志。也可以用findstr实现,不过比较麻烦,效率也不太高。
Still with wax

TOP

返回列表