Вы можете использовать отложенное расширение, потому что оно не заботится о специальных символах.
Единственная проблема - получить содержимое параметра в переменную, поскольку его можно передать только через процентное расширение.
Но в вашемВ случае, если это должно работать.
@echo off
setlocal DisableDelayedExpansion
set "str=%~1"
setlocal EnableDelayedExpansion
echo !str!
Замечание, сначала я отключаю отложенное расширение, поэтому!и ^ не изменяются расширением% 1
РЕДАКТИРОВАТЬ: Отложенное расширение можно отключить или включить с помощью
setlocal DisableDelayedExpansion
setlocal EnableDelayedExpansion
Если включено, добавляется еще односпособ расширения переменных (!variable!
вместо %variable%
), основной для предотвращения влияния переменных в скобках (описано в set /?
).
Но расширение с помощью !variable!
также предотвращает содержимоелюбой дальнейший синтаксический анализ, поскольку отложенное развертывание является последней фазой синтаксического анализа.
Подробно объясняется на , как интерпретатор команд Windows cmd exe выполняет сценарии синтаксического анализа