@echo off
setlocal enabledelayedexpansion
for /r %%a in (*.txt) do (
set /p Str=<"%%~a"
ren "%%~a" "!Str:~,5!%%~xa"
)
pause
追问
批处理试了下.有些改不了.提示如图!
追答可能有些文本第一行的开头5个字符相同,所以导致无法正常重命名。
这样吧!你希望出现同名的,怎么处理?增加序号,还是?
追问可以加序号.加在文字的尾部.谢谢!
追答@echo off
setlocal enabledelayedexpansion
for /r %%a in (*.txt) do (
set /p Str=<"%%~a"
set "num="
for /r %%b in ("!Str:~,5!*.rentmp") do set /a num+=1
if defined num (
ren "%%~a" "!Str:~,5!_!num!.rentmp"
) else (
ren "%%~a" "!Str:~,5!.rentmp"
)
)
ren *.rentmp *.txt
pause
追问
谢谢.大部分的都已成功处理.还有一小部分文本的第一行有特殊符号(/*\等)的会出现错误.如果有时间帮我再改下吧,没时间的话,我自己手动处理.谢谢!
追答/*\这些特殊字符是不允许当成文件名的,所以会报错。这样吧,我把它们变成可命名的符号吧!
@echo off
(echo Str=Replace^(WScript.Arguments^(0^),WScript.Arguments^(1^),WScript.Arguments^(2^)^)
echo Wscript.Echo Str
echo Wscript.Quit)>Replace.VBS
for /r %%a in (*.txt) do (
set /p Str=<"%%~a"
call set "Str=%%Str:~,5%%"
call set "Str=%%Str:"="%%"
call :Replace "%%Str%%" "!" "!"
call :Replace "%%Str%%" "*" "*"
call :Replace "%%Str%%" "/" "/"
call :Replace "%%Str%%" "\" "\"
call :Replace "%%Str%%" ":" "∶"
call :Replace "%%Str%%" "?" "?"
call :Replace "%%Str%%" "|" "丨"
call :Replace "%%Str%%" "<" "〈"
call :Replace "%%Str%%" ">" "〉"
call :CheckExist "%%Str%%"
if defined num (
call echo 正在将 "%%~nxa" 重命名为 "%%Str%%_%%num%%%%~xa"
call ren "%%~a" "%%Str%%_%%num%%.rentmp"
) else (
call echo 正在将 "%%~nxa" 重命名为 "%%Str%%%%~xa"
call ren "%%~a" "%%Str%%.rentmp"
)
)
rem 郁闷,代码有点长,这里一下子不能全部贴上来
rem 请自行拼接上后面的代码
代码有点长了,超过回答字数,请麻烦你追答一下后,我再贴出后面的代码。
追问辛苦了.
追答rem 请拼接到上面的代码中去
del Replace.VBS
ren *.rentmp *.txt
echo, & echo 重命名完成
pause
exit
:CheckExist
set "num="
for /r %%i in ("%~1*.rentmp") do set /a num+=1
goto :eof
:Replace
for /f "delims=" %%i in ('cscript /nologo Replace.VBS "%~1" "%~2" "%~3"') do set "Str=%%~i"
goto :eof
本回答被提问者和网友采纳