我正在寻找一个只能替换一组文件中部分文件名的批处理文件。它们全部在一个目录中,名为XYZ123_DETAILXXX_R.slddrw。我想用" - "替换_DETAIL部分。和_R部分用" -CM"。显然没有引号。但有一个复杂因素可能是我只想在.slddrw文件上进行此更改,而不是在该目录中对.sldprt文件进行此更改。我找到了其他脚本来删除部分文件名,但没有选择性替换。提前谢谢。
答案 0 :(得分:0)
你走了。
Setlocal enabledelayedexpansion
Set "Old=_DETAIL"
Set "New=-"
Set "Old_=_R"
Set "New_=-CM"
for /f "tokens=*" %%a in ('dir /b /od *.slddrw') do (
set File=%%~nxa
set File=!File:%Old_%=%New_%!
set File=!File:%Old%=%New%!
ren "%%a" "!File!"
)
Pause&Exit
答案 1 :(得分:0)
请在执行实际重命名时删除回声:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /b /od *.slddrw') do (
set filename=%%~nxa
set filename=!filename:_R=-CM!
set filename=!filename:_DETAIL=-!
echo ren "%%a" "!filename!"
)
答案 2 :(得分:0)
@echo off
setlocal enableextensions enabledelayedexpansion
for %%a in ("c:\somewhere\*_DETAIL*_R.slddrw"
) do for /f "tokens=1,2 delims=_" %%b in ("%%~na") do (
set "newName=%%c" & set "newName=%%b-!newName:~6!-CM%%~xa"
if not exist "%%~dpa!newName!" echo ren "%%~fa" "!newName!"
)
还有一个。如果输出到控制台是正确的,请删除echo
命令。