5楼的代码写得不错, 但我电脑上执行未成功, 我也用一个新的思路写了一段, 相信更能符合楼主的要求.
代码的执行原理是: 查找c:\movie目录下文件名为cb***01***.rmvb类似格式的文件. 提取其中的数字也就是01等, 并将该文件重命名为cb_01.rmvb的格式.
这就达到了文件名中数字不变, 只改变其格式的目的. 但会过滤掉除阿拉伯数字外的所有字符(如果要保留其他字符或字符串, 请在FOR语句中添加).
另外, 脚本会生成日志文件, 记录处理与未处理的文件总数, 并把未处理的文件写入文件列表. 这样整个代码的执行情况就一目了然了.
稍微修改其中的代码就可以重命名任何文件夹下各种类型的文件. 但是必须符合一定规律.
代码虽然经过测试未发现问题, 但也难免会出现错误, 请谨慎使用!
@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
本段代码具有更大的灵活性, 楼主可以在FOR语句中加入需要匹配的字符或字符串, 这样在重命名文件时这些字符都将保留下来.
Last edited by pengfei on 2006-9-28 at 23:35 ]