Я не знаю, кто сказал вам, что %x:~-8%
будет дополнять вашу переменную, но они неверны, по крайней мере, в версии cmd
, которую я использую (XP).
Эта конструкция просто выдаст последние 8 символов, если переменная равна 8 или больше. Если оно меньше 8, вы получите саму переменную без заполнения.
Если вы хотите, чтобы он был дополнен, вы можете использовать что-то вроде:
set y= %x%
echo %y:~-8%
И, как видно из этого сценария, !abc%%i:~-8!
прекрасно работает, когда вы понимаете, что несете ответственность за заполнение:
@setlocal enableextensions enabledelayedexpansion
@echo off
for /f %%i in ('echo 1 ^&^& echo 92') do (
set var%%i= %%i
echo !var%%i:~-8!
)
echo.=====
set var
endlocal
Это выводит:
1
92
=====
var1= 1
var92= 92
как и следовало ожидать.