Командные блоки в скобках анализируются полностью, и это делается до до их выполнения. Следовательно, ваше выражение %LIST%
раскрывается в начале, а переменная LIST
все еще пуста. Когда наступает время выполнения echo %LIST%
, там уже не %LIST%
, а только пустая строка (читай: «ничего»). Просто так работает (не спрашивайте меня почему).
В таких случаях используется механизм отложенного расширения, и Джои уже сказал вам, что вам нужно использовать специальный синтаксис !LIST!
вместо %LIST%
, который сначала должен быть включен (как правило, командой SETLOCAL EnableDelayedExpansion
, о котором он также упомянул).
С другой стороны, вы можете извлечь подстроку из значения, но сначала значение должно быть сохранено в переменной. По сути, синтаксис для извлечения подстрок один из них:
%VARIABLE:~<i>offset</i>,<i>charcount</i>%
%VARIABLE:~<i>offset</i>%
То есть вы должны указать начальную позицию (начиная с 0) и, необязательно, количество символов, которые нужно вырезать из значения. (Если quantity
опущено, то вы просто обрезаете исходную строку со смещением до конца.) Вы можете узнать больше об этом, введя HELP SET
из командной строки (подождите, это та же команда, о которой упоминал Джои! ).
Еще одна вещь: не забывайте о отложенном расширении. Вам необходимо изменить приведенный выше синтаксис %
на !
. В вашем случае правильное выражение для получения первых 4 символов будет:
!LIST:~0,4!
Вы можете использовать его напрямую или сначала сохранить его в LIST
, а затем просто использовать !LIST!
везде, где вам нужна подстрока.