Невозможно включить отложенное расширение при расширении переменной FOR, например %% A, если переменная содержит !
или ^
. Задержанное расширение повредит значение, потому что один !
будет удален, два !
будут интерпретировать символы между ними как переменную и расширят его (вероятно, до нуля), а ^
будет удален, потому что он используется для экранирования !
.
Самое простое решение - изменить верхнюю часть на SETLOCAL DisableDelayedExpansion
и заменить все отложенные расширения на трюк CALL command %%VAR%%
, который вы уже используете в другом месте. Трюк CALL намного медленнее, чем отложенное расширение, поэтому обычно я бы рекомендовал включить отложенное расширение. Но я думаю, что переключение может быть сложным в вашем случае.
Я также предлагаю вам изменить: определение RmLoop
:RmLoop
Call Set "_FileName2=%%_FileName: = %%"
If "%_FileName2%" neq "%_FileName%" (
set "_FileName=%_FileName2%"
goto :RmLoop
)
Также я не понимаю, почему вы заменяете пробел на себя после вызова: RmLoop?
Я не уверен, что пытается заменить **"!="**
. Возможно, это можно удалить?