我的文件夹名为:
-backup- powerpoint1.ppt
-backup- powerpoint2.ppt
-backup- powerpoint3.ppt
我需要将同一文件夹中的这些文件重命名为:
powerpoint1.ppt
powerpoint2.ppt
powerpoint3.ppt
我需要一个批处理脚本来完成它。
到目前为止,我已经在网上搜索并提出了这个问题,但价值正在得到妥善解决:
@echo off
setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /b *.pptx') do (
set "dt=%%i"
echo.!dt!
set sh=!dt!
echo.!sh!
set "str=%sh:~12,4%"
echo "%%i" "%str%"
set /a a+=1
)
答案 0 :(得分:0)
您的代码无法按预期运行,因为您错过了delayed expansion对临时变量sh
和str
的应用。此外,提取的字符串部分!sh:~12,4!
不正确,应该读取!sh:~9!
以删除-backup-
前缀。这是更正后的代码:
@echo off
setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /b *.pptx') do (
set "dt=%%i"
echo/!dt!
set sh=!dt!
echo/!sh!
set "str=!sh:~9!"
ECHO ren "%%i" "!str!"
set /a a+=1
)
实际上我不会提取某些字符位置,但我会删除sub-string replacement的常量前缀-backup-
。而且您不需要临时变量sh
和str
,也不需要计数器a
。所以我会这样做:
@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir /b *.pptx') do (
set "dt=%%i"
set "dt=!dt:*-backup- =!"
ECHO ren "%%i" "!dt!"
)
endlocal
验证了正确的输出后,从代码中删除大写ECHO
命令以实际重命名文件。
答案 1 :(得分:0)
如果文件名中不需要的部分是空格分隔的,则简单:
@Echo off
For /F "delims=" %%A in ('Dir /B/A-D "-backup- powerpoint*"'
) Do For /f "tokens=2" %%B in ("%%A") Do Echo Ren "%%A" "%%B"
应该做(与扩展无关)。
Ren "-backup- powerpoint1.ppt" "powerpoint1.ppt"
Ren "-backup- powerpoint2.ppt" "powerpoint2.ppt"
Ren "-backup- powerpoint3.ppt" "powerpoint3.ppt"