楼主写批处理一定要注意如何善用、及用好双引号
@echo off
>new.prt echo.
>"其它.prt" echo.
>"其他 1.prt" echo.
>"其他 2.prt" echo.
setlocal enabledelayedexpansion
set sum=0
for /f "delims=" %%a in ('dir/s/b/a-d *.prt') do (
set "str=%%a"
set "str=!str:其他=其它!"
call :slz "%%a" "!str!"
)
echo 文件改名完毕,一共有%sum%个文件被改
pause
exit
:slz
if "%~1"=="" goto:eof
if not "%~1"=="%~2" (
ren "%~1" "%~nx2"&&set /a sum=sum+1
)
我看了发现几个问题:
(1)你替换的不一定是.prt文件,for %%m in (*)这句会取出当前目录所有文件,而for /f %%a in (%%m)就会对取出的文件作处理,而你取得不一定是.prt文件,除非你的目录下全是.prt文件和这个批处理文件。
(2)ren %%m file_old.prt 当第二次运行时会出错。因为当第二次运行时已存在了一个file_old.prt文件,却又把另一个文件重命名为file_old.prt。
看了楼上的,才知道自己一直犯的错误,学习了!