преобразовать строки из смешанного в верхний регистр в пакетном сценарии Windows

Есть ли способ преобразовать строки из смешанного в верхний регистр в пакетном сценарии 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

Объекты должны быть в верхнем регистре, а группы пользователей - нет. Как преобразовать строку типа Cockpit в HRCOCKPIT ?

0
задан 21 May 2021 в 09:41
1 ответ

Я не уверен, что понимаю ваш вопрос на 100%.  Вы, кажется, спрашиваете, как преобразовать (значение) переменной в пакетном файле Windows от смешанного до прописного регистра.  Если да, то вопрос суперпользовать Как сделать прописные все файлы и папки в каталоге? , seçkin bilgiç, содержит ответ.  Предположим, что переменная вызывается obj (т.е. вы сделали set obj=Cockpit), do

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!"
)

При этом используется синтаксис %:old=new% для подстановки в значении переменной.  Например, если мы задам 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, и почему мы используем !...! вместо %...% в назначении в цикле.

1
ответ дан 28 July 2021 в 14:06

Теги

Похожие вопросы