在批处理脚本中重命名文件

时间:2017-06-21 16:35:19

标签: windows batch-file cmd

我的文件夹名为:

-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
) 

2 个答案:

答案 0 :(得分:0)

您的代码无法按预期运行,因为您错过了delayed expansion对临时变量shstr的应用。此外,提取的字符串部分!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-。而且您不需要临时变量shstr,也不需要计数器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"