Проблема не в том, чтобы убежать, похоже, что во втором сценарии.
Если есть строка, подобная
echo %1
, то она расширяется и дает сбой:
echo You & me.acl
Лучше использовать отложенное расширение, например
setlocal EnableDelayedExpansion
set "var=%~1"
echo !var!
Чтобы избежать также проблем с восклицательными знаками !
в параметре, первый set
должен использоваться в контексте DisabledDelayedExpansion
.
set "var=%~1"
setlocal EnableDelayedExpansion
echo !var!