如 c:\movie 文件夹下,有许多rmvb格式的电影文件,命名很复杂,如 cb***01***.rmvb,cb**02****.rmvb,dd****03*.rmvb等。 如何一次批量修改以cb开头的文件,再用正则表达式取到中间的数字字段,使新的名称为: cb_01.rmvb,cb_02.rmvb,cb_03.rmvb 呢?
谢谢!!
谢谢!!
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /a varrepeat=1
for /f %%i in ('dir/b cb*.rmvb') do (
call :GETNUM %%i
if not !number!==# (
ren %%i cb_!number!.rmvb 2>nul && echo %%i =^> cb_!number!.rmvb || ( ren %%i cb_!number!^(!varrepeat!^).rmvb 2>nul && set /a varrepeat=!varrepeat!+1 && echo %%i =^> cb_!number!.rmvb 目标已经存在 && echo %%i =^> cb_!number!^(!varrepeat!^).rmvb )
)
)
echo.
echo 处理完毕,按任意键结束。
pause>nul
GOTO END
:GETNUM
set varstr=%1#
set number=#
:LOOP
if !varstr!==# GOTO ENDLOOP
set firstchar=!varstr:~0,1!
if !firstchar! GEQ 0 (
if !firstchar! LEQ 9 (
set number=!number!!firstchar!
)
)
set varstr=!varstr:~1!
GOTO LOOP
:ENDLOOP
if not !number!==# set number=!number:~1!
:END
@echo off
:: 本段代码为重命名c:\movie目录下文件名为(cb*数字.rmvb)的文件.
::
:: 重命名的规律是提取匹配的.rmvb文件中的数字, 然后把提取到的数字给文件取名为cb_数字.rmvb的格式.
::
:: 注意! 只提取匹配文件中的数字, 其他字符将被过滤. 如果文件名不存在数字将不做处理.
::
:: 请慎用此段代码!
set /a how=0
set /a how_=0
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /a-d /b "c:\movie\cb*.rmvb"') do (
set filename=%%i
set filename_=!filename:~0,-5!:
set name=
call :go
)
(
echo ========================
echo.
echo 共处理文件个数:!how!
echo.
echo 未处理文件个数:!how_!
echo.
echo ========================
)>>unsettled.txt
cls
echo 所有rmvb类型的文件已处理完毕, 请查看日志.
echo.
pause
start unsettled.txt
exit
:go
set num=!filename_:~0,1!
if not "!num!"==":" (
set term=
for %%a in (0 1 2 3 4 5 6 7 8 9) do (
if "!num!"=="%%a" (
set filename_=!filename_:~1!
set name=!name!%%a
set term=
goto go
)
)
if "!term!"=="" set filename_=!filename_:~1!
goto go
)
if not "!name!"=="" (
if exist "c:\movie\cb_!name!.rmvb" (
cls
echo cb_!name!.rmvb文件已存在, 没执行重命名. 系统会将未做处理的文件生成日志unsettled.txt
echo c:\movie\!filename!>>unsettled.txt
set /a how_+=1
pause
) else (
ren "c:\movie\!filename!" cb_!name!.rmvb
set /a how+=1
)
)
goto :eof
Originally posted by he200377 at 2006-9-28 22:44:
要是楼主所说的文件名中有 cb*0*01***.rmvb,这样的文件名那?
Originally posted by NaturalJ0 at 2006-9-28 22:47:
我写的那段不能处理所有情况。比如原来目录中就含有 (1) 这种文件的话,部分文件就有可能改名失败。你说的未成功是指错在这里吗?
[ Last edited ...