如何用批处理,读取指定目录下文件,并且依次输入文件名后,重命名文件?

有很多文件夹,每个里面有三到五个文件,现要求按规定的名字重新命名这些文件夹内的文件。想用批处理改名,请问大侠们,如何实现批处理读取该目录后,自动依次要求输入文件新名称,然后回车改好后,再自动继续要求输入下一个文件的改名,直到改完这个目录里的几个文件。
因为牵扯到规定命名,没有取巧的方法,命名中加当天日期,这个我已经用批处理实现了,现在不提这个了。
比如要改的目录是:F:\work
里面有三个文件,分别为:a4.log b7.log c2.log
目标的三个文件名依次改为:a4.log→542.log; b7.log→ae3.log; c2.log→4a3.log
然后用写成的批处理最终能达到这样:
双击后,批处理就会要求你输入a4.log这个文件重命名的新名称,
注意:只改前面,不改扩展名。手动输入542后,回车;
完成后,要求输入第二个文件重命名的新名称,再输入,回车
依次类推,直到改完所有的文件。

不知道这个能不能实现,请会的大哥们帮一下,50分啦。

第1个回答  2011-11-26
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir/s/b *.log') do (
set /p fn=请输入"%%i"新文件名
move "%%i" %%~dpi!fn!%%~xi
)追问

老兄,你的这个不错,不过我加了个文件夹路径,运行起来的显示的是完整路径,看起来很臃肿,能不能只显示要改名文件的名称?
运行后CMD是这样显示的:

F:\work\a4.log
请输入"F:\work\a4.log"新文件名

如果能改成运行后为这样就好了
a4.log
请输入"a4.log"新文件名
因为我考虑到我要改的很多文件夹路径很长,如果要改的文件夹中文件过多,地址一行显示不了就会换行,这样看起来就乱七八糟。
麻烦再能修改下喽~

追答

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir/s/b *.log') do (
set /p fn=请输入"%%~nxi"新文件名
move "%%~i" %%~dpi!fn!%%~xi
)

本回答被提问者采纳
第2个回答  2011-11-26
只能修改该目录下的文件,不能修改子文件夹下面的文件
把批处理放到目录下执行。
--------------------从下面那行开始,全部是批处理代码--------------
@echo off
title 修改文件名&color 0a&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b ') do (
echo -----------请修改文件------------
echo %%i
set /p a=请输入新文件名
ren %%i !a!%%~xi
)
pause >nul追问

老兄,你的这个不错,放根目录下能实现。不过不加路径的话,我要改的目录很多,不方便。
于是我改了这一句为:
for /f "delims=" %%i in ('dir /b F:\work\*.log') do (
不过用后返回的是“系统找不到指定的文件”。
于是参考下面一个老兄的又改为:
for /f "delims=" %%i in ('dir/s/b F:\work\*.log') do (
这而这次能改了,但是也的问题和下面的一样了,显示修改文件名称时带了完整路径。
带完整路径易混乱啊…

相似回答