如何解决在子文件夹中批量重命名文件名
在此代码中我必须更改什么,以便它也可以执行子文件夹? 还是仅通过子文件夹运行会更容易?
@echo off
setlocal enableDelayedExpansion
for %%F in (*.jpg) do (
set "name=%%F"
ren "!name!" "!name:_=!"
)
此操作在当前文件夹中运行正常,并以jpg文件名字符“ _”删除,但我不知道如何在子文件夹中进行操作,这是我的主要目标。
解决方法
可以使用For /R
循环:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /R . %%G In ("*_*.jpg") Do (
Set "name=%%~nxG"
SetLocal EnableDelayedExpansion
If Not Exist "%%~dpG!name:_=!" Ren "%%G" "!name:_=!"
EndLocal
)
我在.
之后使用了/R
字符来表示当前目录为递归基础,但这不是必需的,因为假定当前目录(如果未提供路径)将用作当前目录。提醒一下,您可以在需要的地方添加其他路径。
尽管您也可以使用For /F
循环使用Dir
循环:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "EOL=? Delims=" %%G In ('Dir /B/S/A:-D "*_*.jpg"') Do (
Set "name=%%~nxG"
SetLocal EnableDelayedExpansion
If Not Exist "%%~dpG!name:_=!" Ren "%%G" "!name:_=!"
EndLocal
)
在这种情况下,如果要使用当前目录以外的目录,则可以将其直接插入Dir
glob中,例如"C:\SomePath\*_*.jpg"
但是请注意,在两种情况下,都没有尝试确保删除下划线后的其余字符串是有效的文件名。如果您希望在环境中使用健壮的代码,则有责任进行此类检查。此外,不包括检查以确保短文件名(8.3)不匹配,因此,如果这在目标环境中可能是个问题,则应包括修改或添加内容以解决此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。