Batch file 重命名文件并识别.bat文件中的空格

Batch file 重命名文件并识别.bat文件中的空格,batch-file,renaming,Batch File,Renaming,我需要一点关于.bat的帮助,我正在使用它来重命名包含多个单词的文件。我每周都会下载几百个文件到一个文件夹中,使用批量重命名工具之类的工具会花费一些时间 我所说的多个单词的意思是,一个文件可能看起来像: 地狱开拓者021(2018)(2个封面)(数字)(奥创帝国之子)。cbr 我想要一些能改变它的东西: 地狱骑士021(2018)(数字)(奥创帝国之子)。cbr 我目前使用的句柄可以将某些内容改为小写 @echo off SETLOCAL ENABLEDELAYEDEXPANSION SET o

我需要一点关于.bat的帮助,我正在使用它来重命名包含多个单词的文件。我每周都会下载几百个文件到一个文件夹中,使用批量重命名工具之类的工具会花费一些时间

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

地狱开拓者021(2018)(2个封面)(数字)(奥创帝国之子)。cbr

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

地狱骑士021(2018)(数字)(奥创帝国之子)。cbr

我目前使用的句柄可以将某些内容改为小写

@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个封面)的空格,从而将其完全从文件名中删除

有人有什么想法吗


*为澄清而编辑

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

@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
另见

在带有SET的命令行中,字符串
SET
是参数0,
NewName=…
是参数1。整个参数字符串必须用双引号括起来,尤其是在包含空格或其中一个字符时`~

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

还有一个注意事项:包含一个或多个
的文件名

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

@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
另见

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

  • 呼叫/?
  • dir/?
  • echo/?
  • endlocal/?
  • 获取/?
  • goto/?
  • 移动/?
  • 设置/?
  • setlocal/?

文件名的格式通常为
name.extension
,请提供输入文件名及其匹配的所需输出文件名的更准确示例。这应该通过,而不是在此评论区域中响应来完成。如果必须在windows上,您可以始终探索powershell或vbscript
set
variable substitution提供的额外功能和功能。变量替换有点奇怪:要替换的字符串不区分大小写。因此,尽管看起来很奇怪,但下面的代码可以按照您的意愿工作:
SET newname=!新名称:%new%=%new%。因此,它也会将
DIGITAL
DIGITAL
更改为
DIGITAL
(只是一个旁注,让您为惊喜做好准备),您根据什么标准确定要从文件名中删除的部分?它总是
(2个封面)
?效果很好!非常感谢你。我知道它不知何故包含了引号,但我不明白把它们放在那里的语法。