58

我想将 URL 前缀存储在 Windows 环境变量中。查询字符串中的 & 符号使这很麻烦。

例如:我有一个 URL 前缀,http://example.com?foo=1&bar=想通过为bar参数提供一个值来创建一个完整的 URL。然后我想使用“开始”命令启动该 URL。

在 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%

完成此操作的语法是什么?

4

9 回答 9

38

回声 %myvar:"=%

于 2008-12-19T00:12:52.140 回答
34

这不是环境变量的限制,而是命令 shell。

将整个作业用引号括起来:

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

虽然如果你试图回应这一点,它会抱怨,因为 shell 会在那里看到一个中断。

您可以通过将 var 名称括在引号中来回显它:

echo "%myvar%"

或者更好,只需使用 set 命令查看内容:

set myvar
于 2008-11-20T23:03:00.340 回答
11

虽然已经有几个很好的答案,但删除引号的另一种方法是使用一个简单的子例程:

: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
于 2013-03-02T13:14:42.587 回答
9

这有效

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

如果我想打印一个包含和不带引号的&符号的变量,我也会使用它。

for %a in ("fish & chips") do echo %~a
于 2011-12-27T04:05:40.303 回答
3

要从变量中仅删除开始和结束引号:

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

这假设您的值中没有 ###" 或 "###,并且如果变量为 NULL 则不起作用。

此方法的功劳归功于http://ss64.com/nt/syntax-esc.html

于 2011-10-12T15:38:36.687 回答
2

使用延迟的环境变量扩展并使用 !var:~1,-1! 删除引号:

@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!
于 2010-05-10T12:11:35.760 回答
1

使用多个变量来做到这一点:

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

set bar=true

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

start iexplore %launch%
于 2011-09-27T20:50:12.797 回答
0
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!

这是因为变量包含特殊的 shell 字符。

于 2014-11-24T17:05:31.547 回答
-1

我认为应该这样做:

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

但你不需要这个,

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

也可以,您只需要为启动命令提供一个标题。

于 2008-11-20T23:00:06.850 回答