Remove quotes from named environment variables in Windows scripts

57,172

Solution 1

This is not a limitation of the environment variable, but rather the command shell.

Enclose the entire assignment in quotes:

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

Though if you try to echo this, it will complain as the shell will see a break in there.

You can echo it by enclosing the var name in quotes:

echo "%myvar%"

Or better, just use the set command to view the contents:

set myvar

Solution 2

While there are several good answers already, another way to remove quotes is to use a simple subroutine:

:unquote
  set %1=%~2
  goto :EOF

Here's a complete usage example:

@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

Solution 3

This works

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

I would also use this if I wanted to print a variable that contained and ampersand without the quotes.

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

Solution 4

To remove only beginning and ending quotes from a variable:

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

This assumes you don't have a ###" or "### inside your value, and does not work if the variable is NULL.

Credit goes to http://ss64.com/nt/syntax-esc.html for this method.

Solution 5

Use delayed environment variable expansion and use !var:~1,-1! to remove the quotes:

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

gigimon

Software Developer and Technology Consultant

Updated on July 09, 2022

Comments

  • gigimon
    gigimon almost 2 years

    I want to store a URL prefix in an Windows environment variable. The ampersands in the query string makes this troublesome though.

    For example: I have a URL prefix of http://example.com?foo=1&bar= and want to create a full URL by providing a value for the bar parameter. I then want to launch that URL using the "start" command.

    Adding quotes around the value for the SET operation is easy enough:

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

    Windows includes the quotes in the actual value though (thanks Windows!):

    echo %myvar%
    "http://example.com?foo=1&bar=true"
    

    I know that I can strip quotes away from batch file arguments by using tilde:

    echo %~1
    

    However, I can't seem to do it to named variables:

    echo %~myvar%
    %~myvar%
    

    What's the syntax for accomplishing this?