文件批量重命名代码

来源:互联网 发布:树莓派3 ubuntu 16.04 编辑:程序博客网 时间:2024/06/05 09:40

1、批量修改扩展名

      如把当前文件夹的*.jpg全部改为*.rar

      @ECHO OFF

      set listFile=list.tmp

      del "%listFile%" /q 1>nul 2>nul

请在此输入内容...

      dir *.jpg /a /b>>"%listFile%"

      FOR /F "tokens=*" %%a IN (

      'more "%listFile%"'

      ) DO (

      ren "%%a" "%%~na.rar"

      )

      del "%listFile%" /q 1>nul 2>nul

      PAUSE

2、前面插入(例如要给所有歌曲名前面添加歌手的姓名)

      @ECHO OFF

      set listFile=list.tmp

      del "%listFile%" /q 1>nul 2>nul

      dir *.mp3 /a /b>>"%listFile%"

      FOR /F "tokens=*" %%a IN (

      'more "%listFile%"'

      ) DO (

      ren "%%a" "歌手名%%a"

      )

      del "%listFile%" /q 1>nul 2>nul

      PAUSE

      3、后面添加(例如要给所有文件名后面添加一个网站的网址)

      @ECHO OFF

      set listFile=list.tmp

      del "%listFile%" /q 1>nul 2>nul

      dir *.mp3 /a /b>>"%listFile%"

      FOR /F "tokens=*" %%a IN (

      'more "%listFile%"'

      ) DO (

      ren "%%a" "%%~naWWW WWW Com%%~xa"

      )

      del "%listFile%" /q 1>nul 2>nul

      PAUSE

      4、删除文件名中的相同部分(例如删除所有文件名中的歌手名)

      @ECHO OFF

      set deleteString=歌手名

      set listFile=list.tmp

      del "%listFile%" /q 1>nul 2>nul

      dir *.mp3 /a /b>>"%listFile%"

      FOR /F "tokens=*" %%a IN (

      'more "%listFile%"'

      ) DO (

      SETLOCAL ENABLEDELAYEDEXPANSION

      set newFileName=%%a

      set newFileName=!newFileName:%deleteString%=!

      ren "%%a" "!newFileName!"

      ENDLOCAL

      )

      del "%listFile%" /q 1>nul 2>nul

      PAUSE

      5、把文件名批量重命名为上级目录名文件名的形式,例如d:\testPath\fatherPath\test.txt

      就要重命名为fatherPathtest.txt,按照它的要求,我们可以分析一下,重命名的命令就是

      ren 然后参数为ren 源文件名 新文件名,即上面的单个进行重命名的话,那就是

      ren "d:\testPath\fatherPath\test.txt" "fatherPathtest.txt"

      既然知道了单个怎么命名,那批量也应该能知道了吧。

      我们知道在批处理中要批量处理的话,那肯定是少不了用for命令的。

      现在我们把他的要求分解成两部分

      1、先用dir命令把所有要进行重命名的文件的全路径列出来发送到一个临时的文本文件。

         (供下面的for语句来读取)

      2、用for命令来读取那个由dir命令生成的列表文件

         a、在循环的过程中取得上级文件夹名

         b、取得文件名

         cren "源文件名" "上级文件夹名文件名"

      上面就是伪代码,接下来是批处理的实现代码

 

      @echo off

      rem 生成临时列表文件

      dir d:\*.txt /s /a-d /b>>tmp.txt

      rem for命令来读取那个由dir命令生成的列表文件

      FOR /F "tokens=*" %%a IN (

      'more tmp.txt'

      ) DO (

      rem Setlocal来启用环境变量延迟功能

      Setlocal EnableDelayedExpansion

      rem 取得路径包括了最后一个斜线\

      set tempPath=%%~dpa

      rem 把路径中的最后一个斜线去掉

      set tempPath=!tempPath:~,-1!

 

      rem for命令中来扩展取得路径名

      FOR %%A IN (

         "!tempPath!"

      ) DO (

         rem 扩展取得上级目录名

         set filePath=%%~nA

       

         rem 新的文件名为: 上级目录名文件名

         set new_name=!filePath!%%~nxa

 

         ren "%%a" "!new_name!"

      )

      ENDLOCAL

      )

      rem 删除临时文件

      del tmp.txt /q 1>nul 2>nul

      pause

 

      6、批量重命名,删除文件名中相同的网站名。

      昨天晚上在网上下载了一个压缩包,里面是邓丽君的歌曲,有50多首。那些歌曲的文件名的后面都加了那个网站的网址,看起来很不爽,大致为

      歌曲www.xxx.com.mp3

      所以我要把后面的www.xxx.com去掉

      如果一个一个去的话,那必然很麻烦,所以就用批处理了,以下的批处理就是用来实现这个功能的。

      因为我这里www.xxx.com.mp3即最后的字符个数为14个,所以我只要取前面的文件名,不取这最后的14个,然后再后面加上.mp3就可以了。

      

      %fileName:~0,-14%

      这样的形式就可以取到了。

      上面是说原理,下面就是我的批处理,批处理代码不是很多,我就不做详细说明了,有兴趣的朋友自己可以看看,也可以根据这个修改成自己需要的批处理。

      @ECHO OFF

      COLOR 0a

      rem 调用初始化部分代码

      CALL :initEnv

      rem 删除临时文件

      CALL :delTmpFiles

      rem 生成列表保存在临时文件中(重命令时根据这个列表来进行命名)

      CALL :madeList>>%tmpFile%

      rem 调用主模块(读取列表,进行重命名)

      CALL :main

      rem 删除临时文件

      CALL :delTmpFiles

      PAUSE

      EXIT

 

      rem 初始化

      :initEnv

      set tmpFile=tmp.txt

      GOTO :EOF

      rem 删除临时文件

      :delTmpFiles

      del %tmpFile% /q 1>nul 2>nul

      GOTO :EOF

      rem 生成列表文件

      :madeList

      dir *.mp3 /a /b

      goto :EOF

      rem 主模块(重命名)

      :main

      SETLOCAL ENABLEDELAYEDEXPANSION

      FOR /F "tokens=*" %%a IN (

      'more %tmpFile%'

      ) DO (

      set strTemp=%%a

 

      ren "%%a" "!strTemp:~0,-14!.mp3"

      )

      GOTO :EOF

 

 

      附:批处理读取文本常用命令

 

      读取文本          用 for /f

      文本名有空格        用 usebackq

      文本内容有空格并不要前面的    delims=

      扩展到 路径 和 文件名     %%~dpn1

      例子:

      for /f "delims=" %%i in (1.txt) do (

      set "str=%%~dpi"

      set str=!str:*]=!

      echo !str:~,-1!       %%~ni

      )

      pause

 

原创粉丝点击