Причиной этого является последовательность пакетных сценариев.
Самое первое, что происходит, - это (плохая 1 ) %
-знаковая обработка, то есть нормальная переменная (%VAR%
) и аргумент командной строки (%1
, * 1008). * и т. д. и %*
) расширение. Команды и, следовательно, даже rem
распознаются на более позднем этапе анализа.
Строка %~
является недопустимой ссылкой на аргумент, поскольку нет ни действительного модификатора, ни их комбинации (f
, d
, p
, n
, x
, s
, a
, t
, z
, $PATH:
) или после цифровой цифры.
См. Эту ветку: Как интерпретатор сценариев команд Windows (CMD.EXE) анализирует?
1 ... Расширение %
, на мой взгляд, некорректно, потому что %~
или %VAR:=
, %VAR:*=
, в случае определения переменной VAR
, приводят к ошибке и переменной расширение, например %VAR:[*]search=[replace]%
или %VAR:~[position][,[length]]%
, прерывается, если VAR
не определено (поэтому %VAR:~%STR%
расширяется до ~text
, если STR
установлено на text
).