简单说明一下,
这个批处理可以自动识别文件名中的连续数字,别且可以作为变量使用,
我写这个批处理,但是是为了方便重命名连续剧之类的文件,因为那些文件都有几集,几部之类的东西,
确实用ren *。* XX*。* 命令是达不到预期效果的,
于是后来就写了个出来,现在都看不懂了- @echo off
- setlocal enabledelayedexpansion
- if not [%1]==[] (set lname=%1)& goto uud
- :kk
- cls
- set lname=
- set 路径=
- echo 请拖入需要批量重命名的文件以获取相关路径及文件名
- set /p lname=需要修改的文件路径及名称:
- if [%lname%]==[] goto kk
- :uud
- call:a ^\ %lname%
- set 路径=%y%
- call:a . "%x%"
- set 文件名=%y:~0,-1%
- set 后缀=.%x%
- call:b "%文件名%"
- :qqqq
- cls
- set p=
- set /p="路径="<nul
- set lj=%路径%
- :oo
- for /f "delims=\ tokens=1,*" %%a in ("!lj!") do (
- if "%%a"=="" (
- goto sf
- ) else (
- set n=%%a
- set m=!n:~1,1!
- if "!m!"==":" (
- echo.!n!
- ) else (
- echo. \%%a
- )
- set "lj=%%b"
- goto oo
- )
- )
- :sf
- echo 文件= *%后缀%
- echo.
- echo 原名:
- echo %原始%
- echo 格式:
- echo %name%
- echo.
- echo 请将格式〖〗括弧中的数字作为变量使用
- echo 可以使用扩展命令1:6,将会追加变量后的六个字符(不包括变量本身代表的数字)
- echo 同时支持原文件名自由截取任意字符.格式 0:-8,6;
- echo 例如 XXXXX第1话 3:* 1和3作为变量使用
- set /p p=输入新的文件名:
- if not defined p goto qqqq
-
- set f=0
- set f1=0
- set w=0
- echo.^@echo off>"%路径%\撤销重命名.bat"
- echo.:由胡朝旭自制批量重命名批处理生成.以防重命名错误出现的次序混乱^<%date%%time%^>>>"%路径%\撤销重命名.bat"
- echo.set z=0 >>"%路径%\撤销重命名.bat"
- echo.>%temp%\mulu
- for /r "%路径%" %%q in (*%后缀%) do (
- set /a f1=!f1!+1
- echo %%q>>%temp%\mulu
- )
- for /f "delims= tokens=*" %%q in (%temp%\mulu) do (
- set /a f=!f!+1
- call:c "%%~nq"
- call:d "%p%" "%%~nq"
- echo ren "!cname!%后缀%" "%%~nxq" ^>nul 2^>nul^&if %%errorlevel%%==1 set /a z=%%z%%+1>>"%路径%\撤销重命名.bat"
- ren "%%q" "!cname!%后缀%" >nul 2>nul&if errorlevel 1 (
- set /a w=!w!+1
- )
-
- )
- del /q %temp%\mulu
- echo.echo 撤销重命名时出现%%z%%个错误>>"%路径%\撤销重命名.bat"
- echo.pause^>nul>>"%路径%\撤销重命名.bat"
- cls
- echo 需 处 理 文 件总数:%f1%
- echo 实际重命名操作次数:%f%
- echo 出现 未知错误 次数:%w%
- if /i %f1% neq %f% echo.&echo.&echo.&echo 可能出现文件重复重命名情况,请自行修改.任意键继续&pause>nul
- if /i %w% neq 0 pause>nul
- goto kk
- :有时会有将第一个被重命名的文件再添加到列表中重命名一次的问题.
-
-
-
- ::------------------------------------------------------------------------
- :a
- set y=
- set "x=%2"
- set "x=%x:"=%"
- :y
- for /f "delims=%1 tokens=1,*" %%a in ("%x%") do (
- if "%%b"=="" (
- goto EOF
- ) else (
- set "y=%y%%%a%1"
- set "x=%%b"
- goto y
- )
- )
-
-
- ::------------------------------------------------------------------------
- :b
- set "xx=%1"
- set "xx=%xx:"=%"
- set name=
- set 原始=
- set 列=0
- set 初始值=0
- :st
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" goto EOF
- :mm
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set /a 列=!列!+1
- set "原始=!原始!〖!l!"
- goto nn
- )
- )
- set /a 初始值=!初始值!+1
- set "name=!name!!l!"
- set "原始=!原始!!l!"
- goto st
- :nn
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" (
- set "name=!name!〖!列!〗"
- set "原始=!原始!〗"
- goto EOF
- )
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "原始=!原始!!l!"
- goto nn
- )
- )
- set "name=!name!〖!列!〗"
- set "原始=!原始!〗"
- goto st
- ::------------------------------------------------------------------------
- :c
- set "xx=%1"
- set "xx=%xx:"=%"
- set 列=1
- set 初始值=0
- set "l=!xx:~%初始值%,1!"
- :st2
- if "%l%"=="" goto EOF
- :mm2
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "p=!l!"
- goto nn2
- )
- )
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- goto st2
- :nn2
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" goto EOF
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "p=!p!!l!"
- goto nn2
- )
- )
- set %列%=%p%
- set /a 列=!列!+1
- set p=
- goto st2
-
-
- ::------------------------------------------------------------------------
- :d
- set "xx=%1"
- set "xx=%xx:"=%"
- set "yy=%2"
- set "yy=%yy:"=%"
- set cname=
- set 初始值=0
- :st3
- set "l=!xx:~%初始值%,1!"
- set /a 初始值=!初始值!+1
- set "l1=!xx:~%初始值%,1!"
- if /i !l! equ 0 (
- if "!l1!"==":" ( call:pp "%yy%") else (
- set /a 初始值=!初始值!-1
- set "cname=!cname!!yy!"
- )
- )
- set /a 初始值=!初始值!-1
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" goto EOF
- :mm3
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "k=!k!!l!"
- goto nn3
- )
- )
- set /a 初始值=!初始值!+1
- set "cname=!cname!!l!"
- goto st3
- :nn3
- set /a 初始值=!初始值!+1
- set l=!xx:~%初始值%,1!
-
- if "%l%"=="" (
- set "cname=!cname!!%k%!"
- set k=
- goto EOF
- )
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "k=!k!!l!"
- goto nn3
- )
- )
- set "cname=!cname!!%k%!"
- set k=
- goto st3
-
-
- ::------------------------------------------------------------------------
- :pp
- set tt=
- set "x2=%1"
- set "x2=%x2:"=%"
- :pl
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- if "!l!"==";" (
- set "cname=!cname!!x2:~%tt%!"
- set /a 初始值=!初始值!+2
- goto EOF
- ) else (
- set "tt=%tt%%l%"
- goto pl
- )
- :EOF
复制代码
|