最好用bat批处理为文件名前加上文件夹名的前缀!

2024-12-16 07:05:51
推荐回答(3个)
回答1:

以下这个批处理就可以解决你的问题。
注意,这是我2008年写的批处理,如果你要用的话,你要先看懂我的代码。
几乎都有注释了,应该难度不大。你只需要修改一下
开头的那行
dir d:\*.txt /s /a-d /b>>tmp.txt
跟后面的
echo ren "%%a" "!new_name!"
就好了
关于这个问题的解决思路,你可以参考一下我百度空间里的这篇文章。
http://hi.baidu.com/%D2%E4%C1%D6%D7%D3/blog/item/40752995f58fc80e7af4800b.html

@echo off
rem 生成临时列表文件
dir d:\*.txt /s /a-d /b>>tmp.txt

rem 用for命令来读取那个由dir命令生成的列表文件
FOR /F "tokens=*" %%a IN (
'more tmp.txt'
) DO (
rem 用Setlocal来启用环境变量延迟功能
Setlocal EnableDelayedExpansion

rem 取得路径包括了最后一个斜线\
set tempPath=%%~dpa

rem 把路径中的最后一个斜线去掉
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

回答2:

@echo off
for /f "delims=" %%c in ('dir /b /ad /s') do (
for /f "delims=" %%d in ('dir /b /a-d "%%c" 2^>nul') do ren "%%c\%%d" "%%~nxc-%%d"
)
setlocal enabledelayedexpansion
for /f "delims=" %%c in ('dir /b /a-d') do (
set fName=%%~dpc
for /f "delims=" %%d in ("!fName:~0,-1!") do if not "%%~fc"==%0 ren "%%c" "%%~nxd-%%c"
)
echo 收工!
pause>nul


------The end

-------批处理..放到跟A文件夹同级使用

不知这样算不算是完美实现?

回答3:

@echo off
for /f "delims=" %%i in ('dir /s/b/ad') do (
cd /d "%%i\"
for /f "delims=" %%k in ('dir /b *.txt') do (
ren "%%~fk" "%%~ni-%%~nxk"
)
)
exit