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

[文本处理] 批处理如何移动并重命名文件?

本帖最后由 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文件夹内,谢谢大家帮忙!
1

评分人数

说得好像批处理会智能识别你文件名“哪些是相同部分,哪些是不相同部分”似的

TOP

本帖最后由 xp3000 于 2016-1-23 15:58 编辑

ImTOOFileRename最强文件重命名工具之一,去试试看,只能手动操作,缺憾不能正则表达式重命名,找个支持预览的正则表达式重命名工具,名字叫拖把更名器,不支持中文正则,还有个老马识途更名器

下面的是另类处理法,首先用批处理获取目录下的视频音频文件名列表,(新闻联播.txt)
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b/a-d/oN *.avi *.wav') do echo %%a >>新闻联播.txt
复制代码
下载个EmEditor,新建个文本文档,将下面的代码复制保存,改名为 新闻联播.jsee,
  1. document.selection.StartOfDocument();
  2. 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);
  3. var n=prompt("请输入起始序号:","0");
  4. var nPaddingLength=prompt("请输入数位扩展长度:","1");
  5. var found=0;
  6. var PaddingString = function(sText, nPaddingLength)
  7. {
  8.     for(var i = sText.length; i < nPaddingLength; i++)
  9.         sText = "0" + sText;
  10.     return(sText);
  11. }
  12. do {                              //
  13.     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);
  14.     n++;
  15. } while (found);
复制代码
用EmEditor软件打开新闻联播.txt,点击软件界面的宏选项,点击选择选项框,选择上面做的那个新闻联播.jsee,然后点击宏,运行新闻联播.jsee,
完成后他会生成新内容,把这个另存为XX.BAT,放到音频视频所在目录运行就可以了

TOP

本帖最后由 hlzj88 于 2016-1-23 08:30 编辑

因为名称前8位是相同的,直接截取还是可以的
目的,学习批处理

TOP

本帖最后由 hlzj88 于 2016-1-23 10:02 编辑
  1. @echo off&&setlocal enabledelayedexpansion
  2. set/a p=0
  3. for /f "delims=" %%i in ('dir /b/s *.wav') do (
  4.    set /a p+=1
  5.    set lj=%%~pi
  6.    set aa=%%~ni
  7.    set aa=!aa:~0,12!
  8.    move /y %%i c\!aa!A!p!.wav
  9.    move /y "!lj!\*.avi" c\!aa!V.avi
  10. )
  11. pause
复制代码
有一点不和题意,如果用减法来重命名wav,不好处理只有一个wav和两个wav的情况,因此,重命名是从1开始,而非从0开始,当然也是可以实现的,但代码量会增加,偷懒了。
目的,学习批处理

TOP

回复 2# pcl_test


    没办法,为了完成任务

TOP

回复 3# xp3000

好的,多谢,我先试一下!

TOP

返回列表