首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名文件和识别.bat文件中的空格

重命名文件和识别.bat文件中的空格
EN

Stack Overflow用户
提问于 2018-05-27 12:00:56
回答 1查看 1.4K关注 0票数 2

我需要一个.bat来帮助我重命名包含多个单词的文件。我每周都会有几百个下载到一个文件夹中,使用类似于大容量重命名实用程序的工具会花费一些时间。

我所说的多个词的意思是,一个文件看起来可能是:

The Hellblazer 021 (2018) (2套)(数字)(奥创帝国之子).cbr

我想要一些能改变它的东西

The Hellblazer 021 (2018年)(数字)(奥创帝国之子).cbr

我目前使用的句柄将一些东西更改为更低的情况,很好。

代码语言:javascript
复制
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=Digital
SET new=digital
for /f "tokens=*" %%f in ('dir /b *.*') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

我可以在它下面再加一段,以改变我内心的内容。问题是,我无法让它识别像(2盖)这样的空格,从而从文件名中完全删除它。

有人有什么想法吗?

*编辑以作澄清

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-27 15:25:12

关于在命令提示符窗口中运行cmd.exe输出的帮助,cmd /?在最后一段解释说,包含空格或其中一个字符&()[]{}^=;!'+,`~的文件名必须用双引号括起来。

代码语言:javascript
复制
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir * /A-D-H /B 2^>nul') do (
    set "NewName=%%I"
    set "NewName=!NewName:Digital=digital!"
    set "NewName=!NewName: (2 covers)=!"
    move "%%I" "!NewName!"
)
endlocal

另见How to set environment variables with spaces?

在使用SET的命令行中,字符串set是参数0,NewName=...是参数1。整个参数字符串必须用双引号括起来,特别是在包含空格或其中一个字符&()[]{}^=;!'+,`~<|>的情况下。

嗯,命令SET有一个非常特殊的参数字符串解析,这使得即使在将带空格和括号的字符串值分配给环境变量时也经常可以省略双引号。但是执行的命令块以(开头。Windows命令处理器在执行命令) FOR之前解析整个命令块时找到的下一个被解释为命令块的结束,除非)位于一个双引号字符串中,或者用^转义为文字字符,而不是命令块的结尾。因此,强烈建议将参数字符串始终用双引号括起来,如果参数字符串不能100%保证参数字符串不包含命令行关键字符。

还要注意:由于启用了延迟的环境变量展开,包含一个或多个!的文件名将无法由上述批处理文件正确处理。

解决方案是通过使用子程序来避免使用延迟扩展。

代码语言:javascript
复制
@echo off
for /F "eol=| delims=" %%I in ('dir * /A-D-H /B 2^>nul') do call :RenameFile "%%I"
goto :EOF

:RenameFile
set "NewName=%~1"
set "NewName=%NewName:Digital=digital%"
set "NewName=%NewName: (2 covers)=%"
move %1 "%NewName%"
goto :EOF

另见Where does GOTO :EOF return to?

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。

  • call /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • move /?
  • set /?
  • setlocal /?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50551916

复制
相关文章

相似问题

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