首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名批处理脚本中的文件

重命名批处理脚本中的文件
EN

Stack Overflow用户
提问于 2017-06-22 00:35:19
回答 2查看 71关注 0票数 0

我有一个文件夹,其中的文件名为:

代码语言:javascript
复制
-backup- powerpoint1.ppt
-backup- powerpoint2.ppt
-backup- powerpoint3.ppt

我需要将同一文件夹中的这些文件重命名为:

代码语言:javascript
复制
powerpoint1.ppt
powerpoint2.ppt
powerpoint3.ppt

我需要一个批处理脚本来完成这一点。

到目前为止,我已经在网上搜索到了这个,但是值正在正确地解析:

代码语言:javascript
复制
@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
) 
EN

回答 2

Stack Overflow用户

发布于 2017-06-22 01:38:16

您的代码不能按预期工作,因为您错过了对中间变量shstr应用delayed expansion。另外,提取的字符串部分!sh:~12,4!不正确,它应该读取!sh:~9!以便删除-backup-前缀。这是更正后的代码:

代码语言:javascript
复制
@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。所以我会这样做:

代码语言:javascript
复制
@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 命令,以实际重命名文件。

票数 0
EN

Stack Overflow用户

发布于 2017-06-22 03:34:30

如果文件名中不需要的部分用空格分隔,那么:

代码语言:javascript
复制
@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"

应该这样做(独立于扩展)。

代码语言:javascript
复制
Ren "-backup- powerpoint1.ppt" "powerpoint1.ppt"
Ren "-backup- powerpoint2.ppt" "powerpoint2.ppt"
Ren "-backup- powerpoint3.ppt" "powerpoint3.ppt"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44681676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档