Board logo

标题: [文件管理] “多删少添”的批量重命名批处理工具 [打印本页]

作者: zljzsmzzx    时间: 2009-7-6 23:28     标题: “多删少添”的批量重命名批处理工具

    这是第四次在本论坛发原创小工具了。可能大家手上已经有类似用途的批处理了,我不敢说没有我的好,但我敢说肯定没有我的“个性”。不多说了。大家用得好就请回来顶个帖,提提建议。当然了,你看完用完直接闪人我也是不能把你怎么样的,所以无所谓了。
    批处理本身就有相关的使用说明,如果看完后还是不清楚怎么用可以跟帖提出,我会一一解答。
  1. @echo off&color 0a&setlocal enabledelayedexpansion
  2. cls
  3. if not defined hzm (
  4.     echo+请把你要重命名的文件中任意一个文件拖到该窗口。
  5.     echo+注:本程序不支持没有后缀名的文件。
  6.     set "hzm="&set /p hzm=文件完整路径=
  7.     if "!hzm!" == "" (endlocal&%~s0&exit)
  8.     call :hzm !hzm!
  9.     if not "!PH:~1,2!" equ ":\" if not "!PH:~2,2!" equ ":\" (endlocal&%~s0&exit)
  10.     %~s0&exit
  11. )
  12. if "%~1"=="" (
  13.     echo+你要重命名的文件为:
  14.     echo+目录[!PH!]下的所有[.!hzm!]文件。
  15.     echo+请选择操作选项:
  16.     echo+
  17.     echo+[1]^<---^>方式一:筛选命名。
  18.     echo+
  19.     echo+[2]^<---^>方式二:顺序命名。
  20.     echo+
  21.     echo+[3]^<---^>返回重新设定文件类型。
  22.     echo+
  23.     echo+[4]^<---^>退出程序。
  24.     echo+
  25.     set/p=您选择选项[ ]进行操作。<nul
  26.     for /l %%a in (1,1,12) do set /p=<nul
  27.     set "xuanze="&set/p xuanze=
  28.     if !xuanze! == 1 (%~s0 1&exit)
  29.     if !xuanze! == 2 (%~s0 2&exit)
  30.     if !xuanze! == 3 (endlocal&set "hzm="&%~s0&exit)
  31.     if !xuanze! == 4 (exit)
  32.     %~s0&exit
  33. )
  34. if "%~1"=="1" (
  35.     (
  36.         echo+^|+----------------------------删 除----------------------------+^|
  37.         echo+^|+                                                             +^|
  38.         echo+^|+ 请在下面设置要删除的字符串,多个字符串请分行设置。          +^|
  39.         echo+^|+ 设置区只预留了三行,其实可以设置任意多行。                  +^|
  40.         echo+^|+ 但分行越多越影响效率,所以连续的字符最好能设置在一行内。    +^|
  41.         echo+^|+ 如果不知道该如何设置,下面有个实例说明。请先看懂了再设置。  +^|
  42.         echo+^|+                                                             +^|
  43.         echo+^|+-----------------------以下是删除设置区----------------------+^|
  44.         echo+
  45.         echo+
  46.         echo+
  47.         echo+^|+-----------------------以上是删除设置区----------------------+^|
  48.         echo+*
  49.         echo+^|+----------------------------添 加----------------------------+^|
  50.         echo+^|+                                                             +^|
  51.         echo+^|+ 与删除设置不同的是,添加设置只能设置两行。                  +^|
  52.         echo+^|+ 第一行内设置[原文件名]前面要添加的字符串。                  +^|
  53.         echo+^|+ 第二行内设置[原文件名]后面要添加的字符串。                  +^|
  54.         echo+^|+ 即使设置了两行以上也只读取前两行的设置。                    +^|
  55.         echo+^|+                                                             +^|
  56.         echo+^|+-----------------------以下是添加设置区----------------------+^|
  57.         echo+
  58.         echo+
  59.         echo+^|+-----------------------以上是添加设置区----------------------+^|
  60.         echo+^|+                                                             +^|
  61.         echo+^|+--------------------------实例说明---------------------------+^|
  62.         echo+^|+ “[娱乐]西游记.CD1.DVD.rmvb”重命名为“西游记.第1集.rmvb”。+^|
  63.         echo+^|+ 先来分析一下吧。1要变成第1集,说明先要把1变成[原文件名]。   +^|
  64.         echo+^|+ 这样就可以用添加设置在"1"的前面和后面添加字符串了。         +^|
  65.         echo+^|+ 要让“[娱乐]西游记.CD1.DVD.rmvb”变成“1.rmvb”。           +^|
  66.         echo+^|+ 即删除1前面的“[娱乐]西游记.CD”和1后面的“.DVD”就可以了。 +^|
  67.         echo+^|+ 这里请大家注意一点,RMVB是文件后缀名,不用考虑的。          +^|
  68.         echo+^|+ 思路很清晰了。现在就按上面的思路来设置一下吧。设置如下:    +^|
  69.         echo+^|+                                                             +^|
  70.         echo+^|+------------------------以下是删除设置-----------------------+^|
  71.         echo+^|[娱乐]西游记.CD
  72.         echo+^|.DVD
  73.         echo+^|+------------------------以下是添加设置-----------------------+^|
  74.         echo+^|西游记.第
  75.         echo+^|集
  76.         echo+^|+-------------------------------------------------------------+^|
  77.         echo+^|+ 说起来一大堆,其实用起来很简单的。我想你应该都能看懂吧。    +^|
  78.         echo+^|+ 删除设置和添加设置可以单独使用,也可以同时使用,看情况而定。+^|
  79.         echo+^|+ 设置好了以后保存再关闭就可以了。                            +^|
  80.         echo+^|+-------------------------------------------------------------+^|
  81.     )>"%temp%\set.ini"
  82.     start "" /wait "%temp%\set.ini"
  83.     cd.>"%temp%\list.txt"
  84.     for /f "delims=" %%a in ('dir/b "%PH%*.%hzm%"') do (
  85.         set "name=%%a"&set "name=!name:.%hzm%=!"
  86.         set "add="&set "num="
  87.         for /f "usebackq eol=| delims=" %%i in ("%temp%\set.ini") do (
  88.             if "%%i" equ "*" set "add=add"
  89.             if "!add!" equ "add" (
  90.                 set/a num+=1
  91.                 if !num! equ 2 set "name=%%i!name!"
  92.                 if !num! equ 3 set "name=!name!%%i"
  93.             ) else set "name=!name:%%i=!"
  94.         )
  95.         echo ren "%PH%%%a" "!name!.%hzm%">>"%temp%\list.txt"
  96.     )
  97.     del "%temp%\set.ini"
  98.     cls&type "%temp%\list.txt"
  99.     echo+
  100.     echo+以上显示的是本次操作的命名清单列表,检查无误后选择操作:
  101.     echo+
  102.     echo+[^<]^<---^>直接回车继续重命名操作。
  103.     echo+[Q]^<---^>输入Q再回车退出程序。
  104.     echo+[?]^<---^>输入其它任意值再回车返回上级菜单。
  105.     set/p=您选择选项[ ]进行操作。<nul
  106.     for /l %%a in (1,1,12) do set /p=<nul
  107.     set "ok="&set/p ok=
  108.     if "!ok!" equ "" (goto goon1)
  109.     if /i !ok! equ q (del "%temp%\list.txt"&exit)
  110.     endlocal
  111.     %~s0&exit
  112.     :goon1
  113.     for /f "usebackq delims=" %%b in ("%temp%\list.txt") do %%b
  114.     del "%temp%\list.txt"
  115.     endlocal
  116.     %~s0&exit
  117. )
  118. if "%~1"=="2" (
  119.     echo+^|+ -------------------------简单说明------------------------- +^|
  120.     echo+^|+                                                            +^|
  121.     echo+^|+ 顺序命名(估且这么叫吧)后的最终效果如下所示:             +^|
  122.     echo+^|+ 0001.*、0002.*、0003.*、0004.*、0005.*……                 +^|
  123.     echo+^|+ 顺序命名是有较严格的规定的。文件名必需是正整数形式。       +^|
  124.     echo+^|+ 像1.txt、123.rmvb、102.jpg这样的都可行。                   +^|
  125.     echo+^|+ 而像001.txt、0123.rmvb、000102.jpg这样就不行。             +^|
  126.     echo+^|+ 一般情况下,顺序命名要用筛选命名来配合着用。               +^|
  127.     echo+^|+ 即先用筛选命名成符合的文件名,再用顺序命名来达到最终效果。 +^|
  128.     echo+^|+ 这两者能灵活运用则能起到事半功倍的效果。                   +^|
  129.     echo+^|+ ---------------------------------------------------------- +^|
  130.     echo+^|+ 警告:如果文件名不符合要求请不要使用该方式,否则后果自负。 +^|
  131.     echo+^|+ ---------------------------------------------------------- +^|
  132.     echo+[^<]^<---^>直接回车继续重命名操作。
  133.     echo+[Q]^<---^>输入Q再回车退出程序。
  134.     echo+[?]^<---^>输入其它任意值再回车返回上级菜单。
  135.     set/p=您选择选项[ ]进行操作。<nul
  136.     for /l %%a in (1,1,12) do set /p=<nul
  137.     set "ok="&set/p ok=
  138.     if "!ok!" equ "" (goto goon2)
  139.     if /i !ok! equ q exit
  140.     endlocal
  141.     %~s0&exit
  142.     :goon2
  143.     cd.>"%temp%\list.txt"
  144.     for /f %%a in ('dir/b "%PH%*.%hzm%"') do (
  145.         set "name=%%a"&set "name=!name:.%hzm%=!"
  146.         set "name=000000000000000000000000000000!name!"&set "name=!name:~-4!"
  147.         echo ren "%PH%%%a" "!name!.%hzm%">>"%temp%\list.txt"
  148.     )
  149.     cls&type "%temp%\list.txt"
  150.     echo+
  151.     echo+以上显示的是本次操作的命名清单列表,检查无误后选择操作:
  152.     echo+
  153.     echo+[^<]^<---^>直接回车继续重命名操作。
  154.     echo+[Q]^<---^>输入Q再回车退出程序。
  155.     echo+[?]^<---^>输入其它任意值再回车返回上级菜单。
  156.     set/p=您选择选项[ ]进行操作。<nul
  157.     for /l %%a in (1,1,12) do set /p=<nul
  158.     set "ok="&set/p ok=
  159.     if "!ok!" equ "" (goto goon)
  160.     if /i !ok! equ q (del "%temp%\list.txt"&exit)
  161.     endlocal
  162.     %~s0&exit
  163.     :goon
  164.     for /f "usebackq delims=" %%b in ("%temp%\list.txt") do %%b
  165.     del "%temp%\list.txt"
  166.     endlocal
  167.     %~s0&exit
  168. )
  169. :hzm
  170. set "PH=%~dp1"
  171. set "hzm=%~x1"
  172. set "hzm=%hzm:~1%"
  173. goto eof
复制代码

作者: namejm    时间: 2009-7-6 23:41

  多字段删除、在文件名前后添加字符串等方式,确实是用批处理做重命名操作的一些创举,楼主确实费心不少。但是,“别具一格”四字语意太过宽泛,有吸引眼球的嫌疑,作为原创代码的标题,显得不够严谨,还希望楼主能斟酌一下标题,换个更加具体化的词语,以利于论坛搜索。
作者: zljzsmzzx    时间: 2009-7-7 00:12     标题: 回复 2楼 的帖子

“别具一格”四字语意太过宽泛,有吸引眼球的嫌疑

呵呵,这点小心思都能被namejm兄看透。标题已改。不知道这样是不是可以。因为标题字数有限,不可能描述得面面俱到。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2