Это базовый шаблон сопоставления и замены.
Вот помощь от set /?
:
Environment variable substitution has been enhanced as follows:
%PATH:str1=str2%
would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2". "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output. "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.
Дополнительный поворот в вашем примере заключается в том, что используется синтаксис «отложенного расширения», в котором в качестве символа расширения переменной среды используется символ !
вместо %
.
Таким образом, команда set a=!a: =!
удаляет все пробельные символы из содержимого переменной a
.
Требуется отложенное расширение (или, по крайней мере, делает что-то подобное немного проще) из-за способа, которым cmd.exe обычно расширяет (затем с помощью разделителя %
) весь набор команд в блоке, заключенном в скобки перед выполнением любая его часть.