Вы можете использовать маленький трюк, который, к сожалению, нигде не задокументирован:
call echo %%%1%%
Тогда вы можете использовать отложенное расширение:
setlocal enabledelayedexpansion
echo !%1!
Отсроченное расширение помогает здесь в основном потому, что оно использует другие разделители для переменной и оценивает их непосредственно перед выполнением команды, в то время как обычно оценка может конфликтовать с обычным расширением параметра.
Другим способом переусердствовать является подпрограмма:
call :meh "echo %%%1%%"
...
:meh
%~1
goto :eof
Все примеры, включая другой ответ, имеют здесь одну общую черту: все они вынуждают cmd
дважды оценивать переменные / параметры . В противном случае это не сработает, поскольку первая оценка должна привести к %VariableName%
, тогда как второй расширит это до содержимого переменной.
Вы можете найти код также на мой SVN .