批处理脚本中实现CMD用户输入转小写用于IF判断的方法
解决CMD脚本中用户输入转小写用于IF判断的问题
嘿,我明白你的痛点——想要让CMD脚本里的用户输入不区分大小写,这样不管用户输Red、RED还是red,都能正确匹配判断对吧?我给你两种实用的解决方法,覆盖不同场景需求:
方法1:纯CMD原生实现(兼容性拉满)
这种方法不用依赖任何外部工具,纯靠CMD的字符串替换功能实现大小写转换,适合所有Windows版本:
@echo off setlocal enabledelayedexpansion set "colour=Default" :WrongColour echo Please choose one of the supported colours for the name(Red,Blue or Green): set /p "colour=" :: 把输入的所有大写字母替换为小写 set "lower_colour=!colour!" set "lower_colour=!lower_colour:A=a!" set "lower_colour=!lower_colour:B=b!" set "lower_colour=!lower_colour:C=c!" set "lower_colour=!lower_colour:D=d!" set "lower_colour=!lower_colour:E=e!" set "lower_colour=!lower_colour:F=f!" set "lower_colour=!lower_colour:G=g!" set "lower_colour=!lower_colour:H=h!" set "lower_colour=!lower_colour:I=i!" set "lower_colour=!lower_colour:J=j!" set "lower_colour=!lower_colour:K=k!" set "lower_colour=!lower_colour:L=l!" set "lower_colour=!lower_colour:M=m!" set "lower_colour=!lower_colour:N=n!" set "lower_colour=!lower_colour:O=o!" set "lower_colour=!lower_colour:P=p!" set "lower_colour=!lower_colour:Q=q!" set "lower_colour=!lower_colour:R=r!" set "lower_colour=!lower_colour:S=s!" set "lower_colour=!lower_colour:T=t!" set "lower_colour=!lower_colour:U=u!" set "lower_colour=!lower_colour:V=v!" set "lower_colour=!lower_colour:W=w!" set "lower_colour=!lower_colour:X=x!" set "lower_colour=!lower_colour:Y=y!" set "lower_colour=!lower_colour:Z=z!" :: 用转换后的小写变量做判断 if "!lower_colour!"=="red" ( goto :SupportedColour ) else if "!lower_colour!"=="blue" ( goto :SupportedColour ) else if "!lower_colour!"=="green" ( goto :SupportedColour ) else ( echo Wrong colour! Please try again. goto :WrongColour ) :SupportedColour echo You chose a valid colour: %colour% endlocal exit /b
关键说明:
- 我们启用了
enabledelayedexpansion(延迟扩展),这样在同一代码块里修改变量后能立刻获取到新值。 - 通过逐个替换26个大写字母为小写,实现了输入的全小写转换,不管用户输入什么大小写组合都能统一。
- 判断时用双引号包裹变量和目标值,避免用户输入带空格时出现语法错误。
方法2:借助PowerShell简化代码(更简洁)
如果你的脚本不需要兼容Windows XP这类老系统,用PowerShell可以大幅简化代码:
@echo off setlocal set "colour=Default" :WrongColour echo Please choose one of the supported colours for the name(Red,Blue or Green): set /p "colour=" :: 调用PowerShell将输入转成小写 for /f "delims=" %%a in ('powershell -Command "$env:colour.ToLower()"') do set "lower_colour=%%a" :: 统一用小写变量判断 if "%lower_colour%"=="red" ( goto :SupportedColour ) else if "%lower_colour%"=="blue" ( goto :SupportedColour ) else if "%lower_colour%"=="green" ( goto :SupportedColour ) else ( echo Wrong colour! Please try again. goto :WrongColour ) :SupportedColour echo Valid colour selected: %colour% endlocal exit /b
关键说明:
- 利用PowerShell的字符串方法
ToLower()直接完成转换,代码更短更易维护。 - 通过
for /f捕获PowerShell的输出,赋值给CMD变量lower_colour。 - 这种方法需要系统安装PowerShell(Windows 7及以上默认自带)。
额外注意事项
- 不管用哪种方法,都要确保
set /p的变量用双引号包裹(比如set /p "colour="),避免输入包含特殊字符时出问题。 - 如果需要支持更多颜色,只需要在IF判断里添加对应的小写值即可,不用修改转换逻辑。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

