把他的要求分解成两部分
1、先用dir命令把所有要进行重命名的文件的全路径列出来发送到一个临时的文本文件。
(供下面的for语句来读取)
2、用for命令来读取那个由dir命令生成的列表文件
a、在循环的过程中取得上级文件夹名
b、取得文件名
c、ren "源文件名" "上级文件夹名文件名"
上面就是伪代码,接下来是批处理的实现代码
@echo offrem 生成临时列表文件
dir d:\*.txt /s /a-d /b>>tmp.txtrem 用for命令来读取那个由dir命令生成的列表文件
FOR /F "tokens=*" %%a IN (
'more tmp.txt'
) DO (
rem 用Setlocal来启用环境变量延迟功能
Setlocal EnableDelayedExpansionrem 取得路径包括了最后一个斜线\
set tempPath=%%~dparem 把路径中的最后一个斜线去掉
set tempPath=!tempPath:~,-1!rem 在for命令中来扩展取得路径名
FOR %%A IN (
"!tempPath!"
) DO (
rem 扩展取得上级目录名
set filePath=%%~nA
rem 新的文件名为: 上级目录名文件名
set new_name=!filePath!%%~nxa
rem 重命名文件名(为了安全,这里只是用echo把命名的
rem 语句显示出来)
rem 如果要进行重命名的话,把echo 去掉就可以了
echo ren "%%a" "!new_name!"
)
ENDLOCAL
)
rem 删除临时文件
del tmp.txt /q 1>nul 2>nul
pause
温馨提示:答案为网友推荐,仅供参考