削除からの引用名に環境変数Windowsスクリプト
-
08-07-2019 - |
質問
たいお店のURLにおけるプレフィックスは、Windows環境変数となります。のampersandsのクエリ文字列をこの面倒なものです。
例えば:いURLの接頭辞 http://example.com?foo=1&bar=
いを作成し完全なURLを提供する価値の bar
パラメータとします。それからいたい開始するURL利用"開始"コマンドを実行します。
追加引用符の値の設定操作が簡単で十分:
set myvar="http://example.com?foo=1&bar="
Windowsは、引用符、実際の値が(Windows!):
echo %myvar%
"http://example.com?foo=1&bar=true"
私がストリップクォートからバッチファイルの引数をチルド:
echo %~1
しかし、私はなんで名前の変数:
echo %~myvar%
%~myvar%
その構文を達成。
解決
この制限の環境変数ではなくて、コマンドはシェルです。
全体を囲む課題を引用:
set "myvar=http://example.com?foo=1&bar="
もしようとした場合にこのエコーで文句としての貝殻のままに休憩あります。
できるエコで囲むの名前を引用符で囲む:
echo "%myvar%"
はい、使用の設定コマンドの内容:
set myvar
他のヒント
echo%myvar:" =%
これは動作します
for %a in (%myvar%) do set myvar=%~a
引用符なしでアンパサンドを含む変数を印刷する場合にも使用します。
for %a in ("fish & chips") do echo %~a
すでにいくつかの良い答えがありますが、引用符を削除する別の方法は、単純なサブルーチンを使用することです:
: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
遅延環境変数展開を使用し、!var:〜1、-1!を使用します!引用符を削除するには:
@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!
変数から開始引用符と終了引用符のみを削除するには:
SET myvar=###%myvar%###
SET myvar=%myvar:"###=%
SET myvar=%myvar:###"=%
SET myvar=%myvar:###=%
これは、###"がないことを前提としています。または値の中の" ###。変数がNULLの場合は機能しません。
クレジットは http://ss64.com/nt/syntax-esc.htmlに移動しますこのメソッドの場合。
複数の変数を使用して実行します:
set myvar="http://example.com?foo=1&bar="
set bar=true
set launch=%testvar:,-1%%bar%"
start iexplore %launch%
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!
変数には特殊なシェル文字が含まれているためです。
これでうまくいくと思う:
for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i
ただし、これは必要ありません、
set myvar="http://example.com?foo=1&bar="
start "" %myvar%
これも機能します。開始コマンドにタイトルを指定するだけです。