Забавно, в
CALL /? нигде не упоминается такой забавный способ, как вызов ДОС-команды.
т.е. я просто использовал
%$CMD% вместо
Call %$CMD%.
2й вариант 2го пункта я в свое время пробовал с точностью наоборот, т.е.
Set d=%a:~!b!,!c!%, и даже для правильности оборачивал его в проверку условия:
if 0==0 Set d=%a:~!b!,!c!% и никакого результата на выходе. Не понимаю.
Для 1го пункта пользуюсь такой заготовкой (по идее Ваш код должен выполняться быстрее, т.к. у меня более длинная операция над строкой, но писалось с учетом известных мне тогда возможностей):
Код:
@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
call :Lenght qwertyuiop
echo %Len%
exit
:Lenght
set Len=0
set LenghtStr=%1
:Lenght1
if "%LenghtStr%"=="" exit /b
set LenghtStr=%LenghtStr:~0,-1%
set /a Len+=1
goto Lenght1