我需要一个.bat来帮助我重命名包含多个单词的文件。我每周都会有几百个下载到一个文件夹中,使用类似于大容量重命名实用程序的工具会花费一些时间。
我所说的多个词的意思是,一个文件看起来可能是:
The Hellblazer 021 (2018) (2套)(数字)(奥创帝国之子).cbr
我想要一些能改变它的东西
The Hellblazer 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盖)这样的空格,从而从文件名中完全删除它。
有人有什么想法吗?
*编辑以作澄清
发布于 2018-05-27 15:25:12
关于在命令提示符窗口中运行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另见How to set environment variables with spaces?
在使用SET的命令行中,字符串set是参数0,NewName=...是参数1。整个参数字符串必须用双引号括起来,特别是在包含空格或其中一个字符&()[]{}^=;!'+,`~<|>的情况下。
嗯,命令SET有一个非常特殊的参数字符串解析,这使得即使在将带空格和括号的字符串值分配给环境变量时也经常可以省略双引号。但是为执行的命令块以(开头。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另见Where does GOTO :EOF return to?
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。
call /?dir /?echo /?endlocal /?for /?goto /?move /?set /?setlocal /?https://stackoverflow.com/questions/50551916
复制相似问题