Удалить кавычки из названных переменных среды в сценариях Windows
Я хочу сохранить префикс URL в переменной среды Windows. Однако амперсанды в строке запроса затрудняют это.
Например: у меня есть префикс URL http://example.com?foo=1&bar=
и вы хотите создать полный URL-адрес, указав значение для параметра bar
. Затем я хочу запустить этот URL, используя команду "start".
Добавление котировок вокруг значения для операции SET достаточно просто:
set myvar="http://example.com?foo=1&bar="
Windows включает в себя кавычки в фактическом значении (спасибо Windows!):
echo %myvar%
"http://example.com?foo=1&bar=true"
Я знаю, что я могу вырезать цитаты из аргументов командного файла, используя тильду:
echo %~1
Однако я не могу сделать это с помощью названных переменных:
echo %~myvar%
%~myvar%
Какой синтаксис для этого?
Ответы
Ответ 1
Это не ограничение переменной среды, а командной оболочки.
Заключить все присваивание в кавычках:
set "myvar=http://example.com?foo=1&bar="
Хотя если вы попытаетесь повторить это, он будет жаловаться, поскольку оболочка увидит там перерыв.
Вы можете повторить его, включив имя var в кавычки:
echo "%myvar%"
Или лучше, просто используйте команду set для просмотра содержимого:
set myvar
Ответ 2
echo% myvar: "=%
Ответ 3
Это работает
for %a in (%myvar%) do set myvar=%~a
Я также использовал бы это, если бы захотел напечатать переменную, содержащую и амперсанд без кавычек.
for %a in ("fish & chips") do echo %~a
Ответ 4
Пока есть несколько хороших ответов, еще один способ удалить кавычки - использовать простую подпрограмму:
:unquote
set %1=%~2
goto :EOF
Здесь приведен полный пример использования:
@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
set words="Two words"
call :unquote words %words%
echo %words%
set quoted="Now is the time"
call :unquote unquoted %quoted%
echo %unquoted%
set word=NoQuoteTest
call :unquote word %word%
echo %word%
goto :EOF
:unquote
set %1=%~2
goto :EOF
Ответ 5
Использовать расширенную переменную переменной и использовать! var: ~ 1, -1! для удаления котировок:
@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!
Ответ 6
Чтобы удалить только начальную и конечную цитаты из переменной:
SET myvar=###%myvar%###
SET myvar=%myvar:"###=%
SET myvar=%myvar:###"=%
SET myvar=%myvar:###=%
Это предполагает, что у вас нет ### "или" ### внутри вашего значения, и не работает, если переменная имеет значение NULL.
Кредит отправляется http://ss64.com/nt/syntax-esc.html для этого метода.
Ответ 7
Используйте для этого несколько переменных:
set myvar="http://example.com?foo=1&bar="
set bar=true
set launch=%testvar:,-1%%bar%"
start iexplore %launch%
Ответ 8
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!
Это связано с тем, что переменная содержит специальные символы оболочки.
Ответ 9
Я думаю, что это должно сделать это:
for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i
Но вам это не нужно,
set myvar="http://example.com?foo=1&bar="
start "" %myvar%
Будет работать тоже, вам просто нужно указать заголовок для команды запуска.