标题: [文本处理] 批处理如何移动并重命名文件? [打印本页]
作者: nic_changgh 时间: 2016-1-22 14:27 标题: 批处理如何移动并重命名文件?
本帖最后由 pcl_test 于 2016-1-22 14:50 编辑
需求如下:有个文件夹a,然后我会往这个文件夹内拷贝一个视频和两个音频文件(也可能是一个音频),这三个文件的文件名前面一部分是相同的,后面一部分是不相同的,例如新闻联播20160122E30aeg45.avi,新闻联播20160122A122551202.wav,新闻联播20160122C0245Edc.wav,后面不相同的那部分是随机的,现在我的需求是,当我运行这个批处理文件(批处理不能在a文件夹内,放在与a文件夹相同目录的b文件夹内)时,可以将三个文件名中不相同的部分直接删掉,然后视频文件名在后面加上V.avi,音频文件分别改成A0.wav和A1.wav,例如上面的文件经修改之后应该为新闻联播20160122V.avi,两个音频文件分别为新闻联播20160122A0.wav和新闻联播20160122A1.wav,然后将这三个文件(可能是两个)剪切到C文件夹内,谢谢大家帮忙!
作者: pcl_test 时间: 2016-1-22 14:49
说得好像批处理会智能识别你文件名“哪些是相同部分,哪些是不相同部分”似的
作者: xp3000 时间: 2016-1-22 20:57
本帖最后由 xp3000 于 2016-1-23 15:58 编辑
ImTOOFileRename最强文件重命名工具之一,去试试看,只能手动操作,缺憾不能正则表达式重命名,找个支持预览的正则表达式重命名工具,名字叫拖把更名器,不支持中文正则,还有个老马识途更名器
下面的是另类处理法,首先用批处理获取目录下的视频音频文件名列表,(新闻联播.txt)- @echo off
- for /f "delims=" %%a in ('dir /b/a-d/oN *.avi *.wav') do echo %%a >>新闻联播.txt
复制代码
下载个EmEditor,新建个文本文档,将下面的代码复制保存,改名为 新闻联播.jsee,- document.selection.StartOfDocument();
- document.selection.Replace("(新闻联播[0-9]{8})(.{1,})(\.(AVI|avi))","MD \"\\1\"\r\nren \\1\\2\\3 \\1V\\3\r\nmove \\1V\\3 \"\\1\"\r\n", eeReplaceAll | eeFindReplaceRegExp);
- var n=prompt("请输入起始序号:","0");
- var nPaddingLength=prompt("请输入数位扩展长度:","1");
- var found=0;
-
- var PaddingString = function(sText, nPaddingLength)
- {
- for(var i = sText.length; i < nPaddingLength; i++)
- sText = "0" + sText;
- return(sText);
- }
-
- do { //
- found=document.selection.Replace("(新闻联播[0-9]{8})(.{1,})(\.(WAV|wav))","ren \\1\\2\\3 \\1A"+PaddingString(n.toString(), nPaddingLength)+"\\3\r\nmove \\1A"+PaddingString(n.toString(), nPaddingLength)+"\\3 \"\\1\"\r\n",eeFindReplaceRegExp);
- n++;
- } while (found);
复制代码
用EmEditor软件打开新闻联播.txt,点击软件界面的宏选项,点击选择选项框,选择上面做的那个新闻联播.jsee,然后点击宏,运行新闻联播.jsee,
完成后他会生成新内容,把这个另存为XX.BAT,放到音频视频所在目录运行就可以了
作者: hlzj88 时间: 2016-1-23 08:25
本帖最后由 hlzj88 于 2016-1-23 08:30 编辑
因为名称前8位是相同的,直接截取还是可以的
作者: hlzj88 时间: 2016-1-23 09:43
本帖最后由 hlzj88 于 2016-1-23 10:02 编辑
- @echo off&&setlocal enabledelayedexpansion
- set/a p=0
- for /f "delims=" %%i in ('dir /b/s *.wav') do (
- set /a p+=1
- set lj=%%~pi
- set aa=%%~ni
- set aa=!aa:~0,12!
- move /y %%i c\!aa!A!p!.wav
- move /y "!lj!\*.avi" c\!aa!V.avi
- )
- pause
复制代码
有一点不和题意,如果用减法来重命名wav,不好处理只有一个wav和两个wav的情况,因此,重命名是从1开始,而非从0开始,当然也是可以实现的,但代码量会增加,偷懒了。
作者: nic_changgh 时间: 2016-1-25 09:09
回复 2# pcl_test
没办法,为了完成任务
作者: nic_changgh 时间: 2016-1-25 09:10
回复 3# xp3000
好的,多谢,我先试一下!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |