如何编写Batch脚本实现文件名单词首字母大写及多IF条件合并
Batch文件名首字母大写脚本修复方案
问题原因
你的脚本运行异常的核心原因有两个:
- 分隔符判断逻辑错误:你对每个分隔符的判断都加了ELSE重置
DELIM为FALSE,前面的分隔符判断结果会被后面的判断覆盖,最终只有最后一个判断的条件(空格)能生效,下划线、左括号的判断结果被清空。 - 小写转换逻辑无效:你原来的小写转换代码是将小写字符替换为自身,完全没有实现把大写字母转小写的效果。
Batch多条件或逻辑的实现方法
Batch没有原生支持OR运算符,你可以用以下方案实现多个条件的或判断,不会受判断顺序影响结果:
先将标志位初始化为FALSE,任意一个条件满足时就将标志位设为TRUE,全程不要写ELSE重置标志位,示例如下:
:: 初始化分隔符标志为FALSE SET "DELIM=FALSE" :: 任意一个分隔符匹配就将标志设为TRUE IF "!L!" == "!UNDERSCORE!" SET "DELIM=TRUE" IF "!L!" == "!SPACE!" SET "DELIM=TRUE" IF "!L!" == "!PARENTHESIS!" SET "DELIM=TRUE"
修正后的完整脚本
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION :: 输入文件夹路径 SET /P DIR="Path to folder: " :: 统一路径末尾的斜杠 IF NOT !DIR:~-1! == "\" SET DIR=!DIR!\ :: 遍历文件夹内所有文件 FOR %%F IN ("%DIR%*") DO ( SET "BASENAME=%%~NXF" SET "NAME=%%~NXF" SET "F=TRUE" SET "NEWNAME=" SET "UNDERSCORE=_" SET "SPACE= " SET "PARENTHESIS=(" CALL :CONVERT ) GOTO END :CONVERT :: 所有字符先转小写 FOR %%A IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO ( SET "NAME=!NAME:%%A=%%a!" ) :: 取当前第一个字符 SET "L=!NAME:~0,1!" :: 首字母需要大写的情况 IF !F! == TRUE ( SET "INITIAL=!L!" :: 首字符转大写 FOR %%I IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO SET "INITIAL=!INITIAL:%%i=%%I!" SET "NEWNAME=!NEWNAME!!INITIAL!" ) ELSE ( SET "NEWNAME=!NEWNAME!!L!" ) :: 多条件或判断是否为分隔符 SET "DELIM=FALSE" IF "!L!" == "!UNDERSCORE!" SET "DELIM=TRUE" IF "!L!" == "!SPACE!" SET "DELIM=TRUE" IF "!L!" == "!PARENTHESIS!" SET "DELIM=TRUE" :: 分隔符之后的下一个字符需要大写 IF !DELIM! == TRUE ( SET "F=TRUE" ) ELSE ( SET "F=FALSE" ) :: 处理剩下的字符 SET "NAME=!NAME:~1!" IF DEFINED NAME GOTO CONVERT :: 重命名 IF NOT "!DIR!!BASENAME!" == "!DIR!!NEWNAME!" REN "!DIR!!BASENAME!" "!NEWNAME!" EXIT /B :END ECHO 重命名完成 PAUSE EXIT /B
内容的提问来源于stack exchange,提问作者GeoGyro
相关产品推荐
相关产品推荐

