Удаление кавычек из именованных переменных среды в сценариях Windows


Я хочу сохранить префикс URL в переменной среды Windows. Амперсанды в строке запроса делает это хлопотно, хотя.

например: у меня есть префикс URL http://example.com?foo=1&bar= и хотите создать полный URL, указав значение для

9 53

9 ответов:

Это не ограничение переменной окружения, а командной оболочки.

приложить все задание в кавычки:

set "myvar=http://example.com?foo=1&bar="

хотя, если вы попытаетесь повторить это, он будет жаловаться, поскольку оболочка увидит там разрыв.

вы можете повторить его, заключив имя var в кавычки:

echo "%myvar%"

или лучше, просто используйте команду set для просмотра содержимого:

set myvar

Эхо %myvar:"=%

это работает

for %a in (%myvar%) do set myvar=%~a

Я бы также использовал это, если бы хотел напечатать переменную, которая содержала и амперсанд без кавычек.

for %a in ("fish & chips") do echo %~a

хотя уже есть несколько хороших ответов, другой способ удалить кавычки-использовать простую подпрограмму:

: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

используйте отложенное расширение переменной среды и используйте !ВАР:~1,-1! чтобы удалить кавычки:

@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!

чтобы удалить только начальные и конечные кавычки из переменной:

SET myvar=###%myvar%###
SET myvar=%myvar:"###=%
SET myvar=%myvar:###"=%
SET myvar=%myvar:###=%

это предполагает, что у вас нет ###" или "### внутри вашего значения и не работает, если переменная равна NULL.

кредит идет на http://ss64.com/nt/syntax-esc.html для этого метода.

использовать несколько переменных, чтобы сделать это:

set myvar="http://example.com?foo=1&bar="

set bar=true

set launch=%testvar:,-1%%bar%"

start iexplore %launch%
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!

это связано с тем, что переменная содержит специальные символы оболочки.

Я думаю, что это должно сделать это:

for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i

но вам это не нужно,

set myvar="http://example.com?foo=1&bar="
start "" %myvar%

тоже будет работать, вам просто нужно указать название команды start.