Доступ к параметрам пакета может быть простым с% 1,% 2, ...% 9 или также% *,
но только если содержание простое.
Не существует простого способа для сложного содержимого, такого как "&"^&
, так как невозможно получить доступ к% 1 без возникновения ошибки.
set var=%1
set "var=%1"
set var=%~1
set "var=%~1"
Строки расширяются до
set var="&"&
set "var="&"&"
set var="&"&
set "var="&"&"
И каждая строка терпит неудачу, так как один из &
находится вне кавычек.
Это можно решить, прочитав из временного файла замеченную версию параметра.
@echo off
SETLOCAL DisableDelayedExpansion
SETLOCAL
for %%a in (1) do (
set "prompt="
echo on
for %%b in (1) do rem * #%1#
@echo off
) > param.txt
ENDLOCAL
for /F "delims=" %%L in (param.txt) do (
set "param1=%%L"
)
SETLOCAL EnableDelayedExpansion
set "param1=!param1:*#=!"
set "param1=!param1:~0,-2!"
echo %%1 is '!param1!'
Хитрость заключается в том, чтобы включить echo on
и расширить% 1 после оператора rem
(работает также с %2 .. %*
).
Таким образом, даже "&"&
может отображаться без ошибок, как отмечается.
Но чтобы перенаправить вывод echo on
, вам нужны два цикла for.
Дополнительные символы * #
используются для защиты от содержимого, такого как /?
(отображает справку для REM
).
Или символ ^ в конце строки может работать как многострочный символ, даже после rem
.
Затем читаем вывод rem параметра из файла, но внимательно.
FOR / F должен работать с отложенным расширением, иначе содержимое с "!" будет уничтожен.
После удаления лишних символов в param1
вы получили его.
И для безопасного использования param1
включите отложенное расширение.