1. Увы, без процедур пока не выходит:
Код:
@Echo Off
Call :StringLen "qwert yuiop"
Echo %$StringLen%
:StringLen
:: -----------------------
:: Нахождение длины строки
:: -----------------------
:: %1 - текстовая строка
:: -----------------------
Set $StringLen=0&Set $StringBuf=%~1
If ""=="%~1" GoTo :EOF
:StringLenLoop
Set /A $StringLen+=1
Call Set $StringChr=%%$StringBuf:~%$StringLen%%%
If ""=="%$StringChr%" GOTO :EOF
GoTo :StringLenLoop
2. Два варианта:
Код:
@Echo Off
Set a=qwertyuiop
Set b=1
Set c=2
Call Set d=%%a:~%b%,%c%%%
Echo %d%
Код:
@Echo Off
SetLocal EnableDelayedExpansion
Set a=qwertyuiop
Set b=1
Set c=2
Set d=!a:~%b%,%c%!
Echo %d%
3. Вроде работает:
Код:
@Echo Off
Set $CMD=DIR
Call %$CMD%