Расширение подстроки работает в пределах набора for
цикла (то есть части в скобках после in
), когда используется немедленное расширение (запишите %%I
вместо %I
в пакетном файле):
set "X=123"
for %I in (%X:~1,1%) do @echo %I
Однако происходит сбой при применении отложенного расширения:
for %I in (!X:~1,1!) do @echo %I
Я ожидаю, что результат будет:
2
Но вместо этого это:
!X:~1
1!
Почему это так и как я могу предотвратить это?
Я знаю, что мог бы обойти это, цитируя набор и используя ~
, но это не то, что я хочу здесь:
for %I in ("!X:~1,1!") do @echo %~I
Сбой следующей командной строки:
for %I in (!X:*2=!) do @echo %I
Неожиданный вывод:
!
Кроме того, for
командные строки с использованием переключателей /R
, /L
и /R
не работают с таким синтаксисом подстроки.
Это, безусловно, связано с тем, что ,
и =
являются разделителями токенов для cmd
, так же как SPACE , TAB , ;
и т. д.