标题: [文件管理] “多删少添”的批量重命名批处理工具 [打印本页]
作者: zljzsmzzx 时间: 2009-7-6 23:28 标题: “多删少添”的批量重命名批处理工具
这是第四次在本论坛发原创小工具了。可能大家手上已经有类似用途的批处理了,我不敢说没有我的好,但我敢说肯定没有我的“个性”。不多说了。大家用得好就请回来顶个帖,提提建议。当然了,你看完用完直接闪人我也是不能把你怎么样的,所以无所谓了。
批处理本身就有相关的使用说明,如果看完后还是不清楚怎么用可以跟帖提出,我会一一解答。- @echo off&color 0a&setlocal enabledelayedexpansion
- cls
- if not defined hzm (
- echo+请把你要重命名的文件中任意一个文件拖到该窗口。
- echo+注:本程序不支持没有后缀名的文件。
- set "hzm="&set /p hzm=文件完整路径=
- if "!hzm!" == "" (endlocal&%~s0&exit)
- call :hzm !hzm!
- if not "!PH:~1,2!" equ ":\" if not "!PH:~2,2!" equ ":\" (endlocal&%~s0&exit)
- %~s0&exit
- )
- if "%~1"=="" (
- echo+你要重命名的文件为:
- echo+目录[!PH!]下的所有[.!hzm!]文件。
- echo+请选择操作选项:
- echo+
- echo+[1]^<---^>方式一:筛选命名。
- echo+
- echo+[2]^<---^>方式二:顺序命名。
- echo+
- echo+[3]^<---^>返回重新设定文件类型。
- echo+
- echo+[4]^<---^>退出程序。
- echo+
- set/p=您选择选项[ ]进行操作。<nul
- for /l %%a in (1,1,12) do set /p=<nul
- set "xuanze="&set/p xuanze=
- if !xuanze! == 1 (%~s0 1&exit)
- if !xuanze! == 2 (%~s0 2&exit)
- if !xuanze! == 3 (endlocal&set "hzm="&%~s0&exit)
- if !xuanze! == 4 (exit)
- %~s0&exit
- )
- if "%~1"=="1" (
- (
- echo+^|+----------------------------删 除----------------------------+^|
- echo+^|+ +^|
- echo+^|+ 请在下面设置要删除的字符串,多个字符串请分行设置。 +^|
- echo+^|+ 设置区只预留了三行,其实可以设置任意多行。 +^|
- echo+^|+ 但分行越多越影响效率,所以连续的字符最好能设置在一行内。 +^|
- echo+^|+ 如果不知道该如何设置,下面有个实例说明。请先看懂了再设置。 +^|
- echo+^|+ +^|
- echo+^|+-----------------------以下是删除设置区----------------------+^|
- echo+
- echo+
- echo+
- echo+^|+-----------------------以上是删除设置区----------------------+^|
- echo+*
- echo+^|+----------------------------添 加----------------------------+^|
- echo+^|+ +^|
- echo+^|+ 与删除设置不同的是,添加设置只能设置两行。 +^|
- echo+^|+ 第一行内设置[原文件名]前面要添加的字符串。 +^|
- echo+^|+ 第二行内设置[原文件名]后面要添加的字符串。 +^|
- echo+^|+ 即使设置了两行以上也只读取前两行的设置。 +^|
- echo+^|+ +^|
- echo+^|+-----------------------以下是添加设置区----------------------+^|
- echo+
- echo+
- echo+^|+-----------------------以上是添加设置区----------------------+^|
- echo+^|+ +^|
- echo+^|+--------------------------实例说明---------------------------+^|
- echo+^|+ “[娱乐]西游记.CD1.DVD.rmvb”重命名为“西游记.第1集.rmvb”。+^|
- echo+^|+ 先来分析一下吧。1要变成第1集,说明先要把1变成[原文件名]。 +^|
- echo+^|+ 这样就可以用添加设置在"1"的前面和后面添加字符串了。 +^|
- echo+^|+ 要让“[娱乐]西游记.CD1.DVD.rmvb”变成“1.rmvb”。 +^|
- echo+^|+ 即删除1前面的“[娱乐]西游记.CD”和1后面的“.DVD”就可以了。 +^|
- echo+^|+ 这里请大家注意一点,RMVB是文件后缀名,不用考虑的。 +^|
- echo+^|+ 思路很清晰了。现在就按上面的思路来设置一下吧。设置如下: +^|
- echo+^|+ +^|
- echo+^|+------------------------以下是删除设置-----------------------+^|
- echo+^|[娱乐]西游记.CD
- echo+^|.DVD
- echo+^|+------------------------以下是添加设置-----------------------+^|
- echo+^|西游记.第
- echo+^|集
- echo+^|+-------------------------------------------------------------+^|
- echo+^|+ 说起来一大堆,其实用起来很简单的。我想你应该都能看懂吧。 +^|
- echo+^|+ 删除设置和添加设置可以单独使用,也可以同时使用,看情况而定。+^|
- echo+^|+ 设置好了以后保存再关闭就可以了。 +^|
- echo+^|+-------------------------------------------------------------+^|
- )>"%temp%\set.ini"
- start "" /wait "%temp%\set.ini"
- cd.>"%temp%\list.txt"
- for /f "delims=" %%a in ('dir/b "%PH%*.%hzm%"') do (
- set "name=%%a"&set "name=!name:.%hzm%=!"
- set "add="&set "num="
- for /f "usebackq eol=| delims=" %%i in ("%temp%\set.ini") do (
- if "%%i" equ "*" set "add=add"
- if "!add!" equ "add" (
- set/a num+=1
- if !num! equ 2 set "name=%%i!name!"
- if !num! equ 3 set "name=!name!%%i"
- ) else set "name=!name:%%i=!"
- )
- echo ren "%PH%%%a" "!name!.%hzm%">>"%temp%\list.txt"
- )
- del "%temp%\set.ini"
- cls&type "%temp%\list.txt"
- echo+
- echo+以上显示的是本次操作的命名清单列表,检查无误后选择操作:
- echo+
- echo+[^<]^<---^>直接回车继续重命名操作。
- echo+[Q]^<---^>输入Q再回车退出程序。
- echo+[?]^<---^>输入其它任意值再回车返回上级菜单。
- set/p=您选择选项[ ]进行操作。<nul
- for /l %%a in (1,1,12) do set /p=<nul
- set "ok="&set/p ok=
- if "!ok!" equ "" (goto goon1)
- if /i !ok! equ q (del "%temp%\list.txt"&exit)
- endlocal
- %~s0&exit
- :goon1
- for /f "usebackq delims=" %%b in ("%temp%\list.txt") do %%b
- del "%temp%\list.txt"
- endlocal
- %~s0&exit
- )
- if "%~1"=="2" (
- echo+^|+ -------------------------简单说明------------------------- +^|
- echo+^|+ +^|
- echo+^|+ 顺序命名(估且这么叫吧)后的最终效果如下所示: +^|
- echo+^|+ 0001.*、0002.*、0003.*、0004.*、0005.*…… +^|
- echo+^|+ 顺序命名是有较严格的规定的。文件名必需是正整数形式。 +^|
- echo+^|+ 像1.txt、123.rmvb、102.jpg这样的都可行。 +^|
- echo+^|+ 而像001.txt、0123.rmvb、000102.jpg这样就不行。 +^|
- echo+^|+ 一般情况下,顺序命名要用筛选命名来配合着用。 +^|
- echo+^|+ 即先用筛选命名成符合的文件名,再用顺序命名来达到最终效果。 +^|
- echo+^|+ 这两者能灵活运用则能起到事半功倍的效果。 +^|
- echo+^|+ ---------------------------------------------------------- +^|
- echo+^|+ 警告:如果文件名不符合要求请不要使用该方式,否则后果自负。 +^|
- echo+^|+ ---------------------------------------------------------- +^|
- echo+[^<]^<---^>直接回车继续重命名操作。
- echo+[Q]^<---^>输入Q再回车退出程序。
- echo+[?]^<---^>输入其它任意值再回车返回上级菜单。
- set/p=您选择选项[ ]进行操作。<nul
- for /l %%a in (1,1,12) do set /p=<nul
- set "ok="&set/p ok=
- if "!ok!" equ "" (goto goon2)
- if /i !ok! equ q exit
- endlocal
- %~s0&exit
- :goon2
- cd.>"%temp%\list.txt"
- for /f %%a in ('dir/b "%PH%*.%hzm%"') do (
- set "name=%%a"&set "name=!name:.%hzm%=!"
- set "name=000000000000000000000000000000!name!"&set "name=!name:~-4!"
- echo ren "%PH%%%a" "!name!.%hzm%">>"%temp%\list.txt"
- )
- cls&type "%temp%\list.txt"
- echo+
- echo+以上显示的是本次操作的命名清单列表,检查无误后选择操作:
- echo+
- echo+[^<]^<---^>直接回车继续重命名操作。
- echo+[Q]^<---^>输入Q再回车退出程序。
- echo+[?]^<---^>输入其它任意值再回车返回上级菜单。
- set/p=您选择选项[ ]进行操作。<nul
- for /l %%a in (1,1,12) do set /p=<nul
- set "ok="&set/p ok=
- if "!ok!" equ "" (goto goon)
- if /i !ok! equ q (del "%temp%\list.txt"&exit)
- endlocal
- %~s0&exit
- :goon
- for /f "usebackq delims=" %%b in ("%temp%\list.txt") do %%b
- del "%temp%\list.txt"
- endlocal
- %~s0&exit
- )
- :hzm
- set "PH=%~dp1"
- set "hzm=%~x1"
- set "hzm=%hzm:~1%"
- goto eof
复制代码
作者: namejm 时间: 2009-7-6 23:41
多字段删除、在文件名前后添加字符串等方式,确实是用批处理做重命名操作的一些创举,楼主确实费心不少。但是,“别具一格”四字语意太过宽泛,有吸引眼球的嫌疑,作为原创代码的标题,显得不够严谨,还希望楼主能斟酌一下标题,换个更加具体化的词语,以利于论坛搜索。
作者: zljzsmzzx 时间: 2009-7-7 00:12 标题: 回复 2楼 的帖子
呵呵,这点小心思都能被namejm兄看透。标题已改。不知道这样是不是可以。因为标题字数有限,不可能描述得面面俱到。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |