有没有办法在 Windows 批处理脚本中将混合字符串转换为大写?
我正在编写一个批处理文件来创建某些对象并授予用户组对它们的访问权限。也就是说,我应该发出如下命令
cas caslibs create path --name CAS_HRCOCKPIT --path /sas/data/projects/HRCOCKPIT /
cas caslibs add-control --name CAS_HRCOCKPIT --group GSSASELA-DEVHRCockpitUsers --grant read
cas caslibs add-control --name CAS_HRCOCKPIT --group GSSASELA-DEVHRCockpitAdmins --grant modify
对象应为大写,但用户组不是。如何将类似这样的字符串转换HRCockpit
为HRCOCKPIT
?
答案1
我不确定我是否完全理解了你的问题。你似乎在问如何将 Windows 批处理文件中的变量(值)从混合转换为全大写。如果是这样,超级用户问题如何将目录中的所有文件和文件夹都变为大写?, 经过塞奇金比尔吉奇,包含答案。假设你的变量被调用obj
(即,你已经完成了set obj=Cockpit
),请执行
setlocal enableDelayedExpansion
︙
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 "obj=!obj:%%A=%%A!"
)
这使用在变量值中执行替换的语法。例如,如果我们执行,则会产生。它的一个有用特性是旧字符串的匹配不区分大小写,但替换保留大小写;因此会产生。类似地,如果,则会产生,因此我们可以使用它用其自身的大写版本替换字母。%variable:old=new%
set animal=cow
%animal:ow=at%
cat
%animal:OW=AT%
cAT
obj=Cockpit
%obj:T=T%
CockpiT
我们循环遍历字母表,得到以下效果
set "obj=%obj:A=A%"
set "obj=%obj:B=B%"
set "obj=%obj:C=C%"
︙
而不必执行全部 26 条语句。
但在批处理文件中,循环中的变量行为很奇怪。这就是为什么我们有setlocal enableDelayedExpansion
,以及为什么我们在循环中的赋值中使用!...!
而不是。%...%