我有一个文件夹,其中的文件名为:
-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
) 发布于 2017-06-22 01:38:16
您的代码不能按预期工作,因为您错过了对中间变量sh和str应用delayed expansion。另外,提取的字符串部分!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 命令,以实际重命名文件。
发布于 2017-06-22 03:34:30
如果文件名中不需要的部分用空格分隔,那么:
@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"https://stackoverflow.com/questions/44681676
复制相似问题