Cra*_*ker 54 windows quotes scripting batch-file environment-variables
我想在Windows环境变量中存储URL前缀.查询字符串中的&符号使这很麻烦.
例如:我有一个URL前缀,http://example.com?foo=1&bar=并希望通过提供bar参数值来创建完整的URL .然后我想使用"start"命令启动该URL.
在SET操作的值周围添加引号很容易:
set myvar="http://example.com?foo=1&bar="
Run Code Online (Sandbox Code Playgroud)
Windows虽然包含实际值中的引号(感谢Windows!):
echo %myvar%
"http://example.com?foo=1&bar=true"
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用代字号从批处理文件参数中删除引号:
echo %~1
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法对命名变量这样做:
echo %~myvar%
%~myvar%
Run Code Online (Sandbox Code Playgroud)
完成此操作的语法是什么?
zda*_*dan 32
这不是环境变量的限制,而是命令shell.
将整个作业括在引号中:
set "myvar=http://example.com?foo=1&bar="
Run Code Online (Sandbox Code Playgroud)
虽然如果你试图回应这个,它会抱怨因为shell会在那里看到一个突破.
您可以通过将var名称括在引号中来回显它:
echo "%myvar%"
Run Code Online (Sandbox Code Playgroud)
或者更好,只需使用set命令查看内容:
set myvar
Run Code Online (Sandbox Code Playgroud)
小智 9
这有效
for %a in (%myvar%) do set myvar=%~a
Run Code Online (Sandbox Code Playgroud)
如果我想打印包含的变量和没有引号的&符号,我也会使用它.
for %a in ("fish & chips") do echo %~a
Run Code Online (Sandbox Code Playgroud)
虽然已有几个好的答案,但删除引号的另一种方法是使用一个简单的子程序:
:unquote
set %1=%~2
goto :EOF
Run Code Online (Sandbox Code Playgroud)
这是一个完整的用法示例:
@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52343 次 |
| 最近记录: |