You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Batch脚本实现文件名单词首字母大写及多IF条件合并

Batch文件名首字母大写脚本修复方案

问题原因

你的脚本运行异常的核心原因有两个:

  1. 分隔符判断逻辑错误:你对每个分隔符的判断都加了ELSE重置DELIM为FALSE,前面的分隔符判断结果会被后面的判断覆盖,最终只有最后一个判断的条件(空格)能生效,下划线、左括号的判断结果被清空。
  2. 小写转换逻辑无效:你原来的小写转换代码是将小写字符替换为自身,完全没有实现把大写字母转小写的效果。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:45:05