58

URL プレフィックスを Windows 環境変数に保存したいと考えています。ただし、クエリ文字列のアンパサンドはこれを面倒にします。

例: の URL プレフィックスがhttp://example.com?foo=1&bar=あり、パラメーターの値を指定して完全な URL を作成したいと考えていbarます。次に、「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%

これを達成するための構文は何ですか?

4

9 に答える 9

38

echo %myvar:"=%

于 2008-12-19T00:12:52.140 に答える
34

これは環境変数の制限ではなく、コマンド シェルの制限です。

割り当て全体を引用符で囲みます。

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

ただし、これをエコーし​​ようとすると、シェルがそこにブレークがあるため、エラーが発生します。

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!

これは、変数に特殊なシェル文字が含まれているためです。

于 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 に答える