Eu também encontrei uma resposta direta. Está perto do corte semântico.
O comando set também possui uma sintaxe de substring. Para pular n caracteres, use %variable:~n%
. Para obter n caracteres começando no deslocamento k use %variable:~k,n%
for /d %%d in (sub-*) do (
set item=%%d
set num=%item:~4%
pushd %%d
copy input-%num% output-%num%
popd
)