Расширение %
, следовательно, расширение нормальных переменных среды (например, %VAR%
), а также аргументов командной строки (например, %0
), является самым первым шагом после прочтения строки, поэтому это происходит еще докоманда rem
распознана.Таким образом, вам нужно избегать %~
(например, записывая rem % + ~ ...
).
Учитывая, что включены расширения команды , что по умолчанию в любом случае, %~
распознается как неверный синтаксис аргумента (ожидается, что за ~
будет следовать десятичная цифра, обозначающая позицию аргумента, или допустимый модификатор, такой как f
, d
, p
, n
, x
и т. д..; см. Аргументы командной строки (параметры) ), что приводит к фатальной ошибке, означающей, что выдается сообщение об ошибке и обработка пакетного файла прерывается (%ErrorLevel%
не заданохотя).
Тот же эффект появляется при попытке сделать подстроку подстановки , но при указании пустой строки поиска (например, %VAR:=replace%
или %VAR:*=replace%
, учитывая, что VAR
определяется), также с включенными расширениями команд.
См. также эту ветку: Как синтаксический анализ сценариев интерпретатора команд Windows (CMD.EXE)?