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

批处理可重用子程序:如何传递任意变量实现转小写功能

实现可复用的批处理大小写转换子程序(支持任意变量)

要让你的大小写转换子程序适配任意变量,核心是通过传递变量名作为参数,结合延迟扩展实现动态变量操作。下面是修改后的完整代码及说明:

修改后的主程序

@echo off
setlocal enabledelayedexpansion

:: 测试示例1:转换PC变量
Set PC=THISISATEST
Call :ToLowerCase PC
echo 转换后PC的值: !PC!

:: 测试示例2:转换NAME变量
Set NAME=MYNAMEISJOHN
Call :ToLowerCase NAME
echo 转换后NAME的值: !NAME!

修改后的子程序

:ToLowerCase
:: %~1 接收传入的变量名(自动去除参数引号)
Set "varName=%~1"

:: 逐个替换大写字母为小写
Set "!varName!=!!varName!:A=a!"
Set "!varName!=!!varName!:B=b!"
Set "!varName!=!!varName!:C=c!"
Set "!varName!=!!varName!:D=d!"
Set "!varName!=!!varName!:E=e!"
Set "!varName!=!!varName!:F=f!"
Set "!varName!=!!varName!:G=g!"
Set "!varName!=!!varName!:H=h!"
Set "!varName!=!!varName!:I=i!"
Set "!varName!=!!varName!:J=j!"
Set "!varName!=!!varName!:K=k!"
Set "!varName!=!!varName!:L=l!"
Set "!varName!=!!varName!:M=m!"
Set "!varName!=!!varName!:N=n!"
Set "!varName!=!!varName!:O=o!"
Set "!varName!=!!varName!:P=p!"
Set "!varName!=!!varName!:Q=q!"
Set "!varName!=!!varName!:R=r!"
Set "!varName!=!!varName!:S=s!"
Set "!varName!=!!varName!:T=t!"
Set "!varName!=!!varName!:U=u!"
Set "!varName!=!!varName!:V=v!"
Set "!varName!=!!varName!:W=w!"
Set "!varName!=!!varName!:X=x!"
Set "!varName!=!!varName!:Y=y!"
Set "!varName!=!!varName!:Z=z!"

Goto :EOF

关键原理说明

  1. 开启延迟扩展:脚本开头的setlocal enabledelayedexpansion是必须的,它允许在同一行代码中动态解析和修改变量。
  2. 传递变量名参数:调用子程序时传入变量名(如Call :ToLowerCase PC),子程序通过%~1获取这个变量名,自动去除参数可能带的引号。
  3. 动态变量操作:使用!varName!引用目标变量,!!varName!:A=a!的执行逻辑是:先解析!varName!得到实际变量名(比如PC),再替换为!PC:A=a!完成大小写转换,最后赋值回原变量。

注意事项

  • 该写法支持常规字母数字组成的变量名,若变量名包含特殊字符(如空格、&等),需要给变量名加引号后传递(如Call :ToLowerCase "MY VAR"),并在子程序中做相应处理。
  • 确保整个脚本的延迟扩展处于开启状态,否则动态变量引用会失效。

内容的提问来源于stack exchange,提问作者user3208239

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:49:51