当前位置:  开发笔记 > 开发工具 > 正文

从Windows脚本中的命名环境变量中删除引号

如何解决《从Windows脚本中的命名环境变量中删除引号》经验,为你挑选了4个好方法。

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

例如:我有一个URL前缀,http://example.com?foo=1&bar=并希望通过提供bar参数值来创建完整的URL .然后我想使用"start"命令启动该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%

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



1> 小智..:

echo%myvar:"=%


如有更简洁的答案,请访问http://stackoverflow.com/a/5181182/508355

2> zdan..:

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

将整个作业括在引号中:

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

虽然如果你试图回应这个,它会抱怨因为shell会在那里看到一个突破.

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

echo "%myvar%"

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

set myvar



3> 小智..:

这有效

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

如果我想打印包含的变量和没有引号的&符号,我也会使用它.

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



4> jimhark..:

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

: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

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有