标题: [文件操作] [已解决]批处理如何根据相同文件名的文本文件,重命名文件? [打印本页]
作者: idema 时间: 2011-1-24 13:59 标题: [已解决]批处理如何根据相同文件名的文本文件,重命名文件?
在同一路径下有一对文件名相同,后缀名不同的两个文件,如何根据其中一个可用文本打开的文件的内容,重命名另一文件。
例如在同一路径下有两个文件,其中一个是260407.mpg,另一个文件是260407.ksc
其中260407.ksc的内容如下:
karaoke := CreateKaraokeObject;
karaoke.internalnumber := 00000000; // 歌曲编号
karaoke.rows := 2;
karaoke := CreateKaraokeObject;
karaoke.clear;
// 歌曲附加信息(便于检索)
karaoke.tag('歌名', '你说他是你想嫁的人');
karaoke.tag('缩写', 'NSTSNX');
karaoke.tag('歌手', '刘德华');
karaoke.tag('字数', '6');
karaoke.tag('语种', '国语');
karaoke.tag('歌类', '男');
karaoke.tag('电影', 'false');
karaoke.tag('风格', '流行');
karaoke.tag('流行', 'true');
karaoke.tag('音量', '130');
karaoke.tag('声道', '1');
karaoke.tag('FMP声道', '32');
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 := '260407.mpg';
现要求根据260407.ksc中的歌手和歌名重命名260407.mpg,即将260407.mpg重命名为“刘德华-你说他是你想嫁的人.mpg”,而后修改260407.ksc中的最后一行,karaoke.CommonVideo := '260407.mpg'; 将其更改为karaoke.CommonVideo := '刘德华-你说他是你想嫁的人.mpg'; 最后修改ksc文件,将260407.ksc修改为刘德华-你说他是你想嫁的人.ksc.
描述的比较繁琐,不知用批处理能否实现批量修改,敬请各位高手指教,多谢了
[ 本帖最后由 idema 于 2011-1-25 11:50 编辑 ]
作者: liion631818 时间: 2011-1-24 16:36 标题: 最好自己先备份,在实现下面脚本,避免给你造成损失
- @echo off&setlocal enabledelayedexpansion
-
- set countFile=0
- for /r %%i in (*.ksc) do (
- set curFilename=%%~ni
- call :renameFile
- set /a countFile+=1
- )
- goto :end
- :renameFile
- for /f "tokens=2,4 delims='" %%i in ('type !curFilename!.ksc') do (
- if "%%i"=="歌名" set "song=%%j"
- if "%%i"=="歌手" set "singer=%%j"
- set song=!song: =!
- set singer=!singer: =!
- )
- REM echo !song! !singer!
- :rname
- set "newname=!singer!-!song!.mpg"
- echo !newname!
- if exist !curFilename!.mpg rename !curFilename!.mpg !newname!
- :modify ksc file
- for /f "delims=" %%i in ('type !curFilename!.ksc') do (
- set "line=%%i"
- set line=!line:%curFilename%=%singer%-%song%!
- echo !line!>>!curFilename!_tmp.ksc
- )
- move /y !curFilename!_tmp.ksc !curFilename!.ksc
- goto :eof
- :end
- echo Modified !countFile! files
- pause
复制代码
[ 本帖最后由 liion631818 于 2011-1-24 17:31 编辑 ]
作者: 随风 时间: 2011-1-24 16:37
不知道是不是这个意思
某文件夹下后有很多对文件,(后缀名不同,文件名相同,都是ksc和mpg后缀),根据ksc文件内容改文件名和ksc内容最后一行
以下代码会删除原ksc文件,测试前先做好备份
代码未测试,有问题跟帖......
:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%n in (*.ksc) do (
- set "str="&set "wjm=%%~nn"
- for /f "usebackq delims=" %%i in ("!wjm!") do (
- if defined str (>>tem echo !str!) else cd.>tem
- set str=%%i
- set var=!str:歌手=!
- if not "!str!"=="!var!" (
- for /f "tokens=4 delims='" %%a in ("!str!") do set gs=%%a
- )
- set var=!str:歌名=!
- if not "!str!"=="!var!" (
- for /f "tokens=4 delims='" %%a in ("!str!") do set gm=%%a
- )
- )
- for /f "delims='" %%a in ("%str%") do >>tem echo %%a '%gs%-%gm%';
- move "tem" "%gs%-%gm%.ksc"
- ren "!wjm!.mpg" "%gs%-%gm%.mpg"
- del /q "!wjm!.ksc"
- )
- pause
复制代码
作者: hanyeguxing 时间: 2011-1-24 16:50
1,批处理放到同目录下
2,.ksc 文件编码为 ANSI
3,未处理敏感字符问题
4,最后一行形如:karaoke.CommonVideo := 'XXXXXX.扩展名';- @echo off&setlocal enabledelayedexpansion
- set .bat==&set .cmd==&set .ksc==
- for %%a in (*) do if not defined %%~xa if exist "%%~na.ksc" (
- (for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%%~na.ksc"') do (
- set "c=%%c"
- if "!c:~13,2!"=="歌手" set m=!c:~19,-3!
- if "!c:~13,2!"=="歌名" set n=!c:~19,-3!
- if "!c:~0,14!"=="karaoke.Common" set "c=karaoke.CommonVideo := '!m!-!n!%%~xa';"
- echo;!c!
- ))>"!m!-!n!.ksc"
- del "%%~na.ksc"
- ren "%%a" "!m!-!n!%%~xa"
- )
复制代码
批处理搜索当前目录下所有非.bat、.cmd、.ksc文件,以文件名匹配.ksc文件,如果存在,则解析此ksc文件获取变量,并以变量修改此文件和.ksc文件的文件名
[ 本帖最后由 hanyeguxing 于 2011-1-24 16:58 编辑 ]
作者: tmplinshi 时间: 2011-1-24 21:01
- @echo off
- for /f "delims=" %%f in ('dir /a:-d /b *.ksc') do (
- findstr /n .* "%%f" >.tmp
- set -DelContent=
- (for /f "delims=" %%a in (.tmp) do (
- set var=%%a
- if not defined -DelContent set -DelContent=. >.tmp
- SetLocal EnableDelayedExpansion
- if "!var:karaoke.tag('歌名=!" neq "!var!" >>.tmp echo 歌名=!var:*, '=!
- if "!var:karaoke.tag('歌手=!" neq "!var!" >>.tmp echo 歌手=!var:*, '=!
- if "!var:karaoke.CommonVideo :=!" neq "!var!" (
- EndLocal
- for /f "delims=" %%a in (.tmp) do set %%a
- SetLocal EnableDelayedExpansion
- >.tmp echo !歌手:~0,-3!-!歌名:~0,-3!
- echo karaoke.CommonVideo := '!歌手:~0,-3!-!歌名:~0,-3!.mpg';
- ) else echo,!var:*:=!
- EndLocal
- )) >"%%f"
- for /f "delims=" %%a in (.tmp) do (
- ren "%%f" "%%a.*"
- ren "%%~dpnf.mpg" "%%a.*"
- )
- )
-
- del .tmp
复制代码
[ 本帖最后由 tmplinshi 于 2011-1-24 21:06 编辑 ]
作者: idema 时间: 2011-1-25 10:31
首先十分感谢大家热心的帮忙,现将测试结果给大家汇报如下。
第一个liion631818的脚本,.mpg文件名可以按要求更改,.ksc文件中的文本内容可以更改,但是.ksc的文件名无法更改。CMD屏幕中不停循环如下信息
王菲-执迷不悔.mpg
那英-干脆.mpg
周华健-我试着假装.mpg
张国荣-风继续吹.mpg
张国荣-侬本多情.mpg
李双江-大阪城的姑娘.mpg
陈慧娴-飘.mpg
陈慧娴-傻女.mpg
无法中断
作者: idema 时间: 2011-1-25 10:59
第二个随风超版的脚本,运行报错,报错如下:
系统找不到文件 *.ksc。
请按任意键继续. . .
但是我很确认相同目录下有ksc和mpg文件
作者: idema 时间: 2011-1-25 11:11
第三个hanyeguxing版主的脚本,.mpg的文件名可以正常修改,.ksc里面的内容修改也正常,但是.ksc的文件名重命名不正确,例如:
karaoke.tag('歌名', '倩女幽魂');
karaoke.tag('缩写', 'QNYH');
karaoke.tag('歌手', '张国荣');
karaoke.tag('字数', '4');
karaoke.tag('语种', '粤语');
karaoke.tag('歌类', '男');
karaoke.tag('电影', 'false');
karaoke.tag('风格', '流行');
karaoke.tag('流行', 'true');
karaoke.tag('音量', '130');
karaoke.tag('声道', '2');
karaoke.tag('FMP声道', '32');
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';
应该命名为张国荣-倩女幽魂.ksc,可是却重命名为张国荣-爱慕.ksc
而张国荣-倩女幽魂.ksc里的内容却是:
karaoke.tag('歌名', '由零开始');
karaoke.tag('缩写', 'YLKS');
karaoke.tag('歌手', '张国荣');
karaoke.tag('字数', '4');
karaoke.tag('语种', '粤语');
karaoke.tag('歌类', '男');
karaoke.tag('电影', 'false');
karaoke.tag('风格', '流行');
karaoke.tag('流行', 'true');
karaoke.tag('音量', '130');
karaoke.tag('声道', '2');
karaoke.tag('FMP声道', '32');
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';
感觉ksc文件的重命名有自动串行的嫌疑
作者: idema 时间: 2011-1-25 11:25
第四个tmplinshi版主的脚本,测试正常
.mpg和.ksc文件名可以正常修改,而且.ksc的内容也修改正常,测试通过
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |