Подтвердить что ты не робот

Удалить кавычки из названных переменных среды в сценариях 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%

Какой синтаксис для этого?

4b9b3361

Ответ 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%

Будет работать тоже, вам просто нужно указать заголовок для команды запуска.