2016-03-21 16 views
2

文字列から引用符を取り除くバッチスクリプトを作成しているとします。文字列は、通常のバッチ変数に格納されている場合バッチファイルのスクリプト引数から引用符を取り除くには?

、あなたがこれを行うだろう:

set name="John" 
echo %name:"=% 

を文字列が位置パラメータに格納されている場合、あなたはこれを行うだろう:

echo %~1 

方法あなたはスクリプトの引数、特に%*の変数に対して同じ効果を達成するつもりですか?

> echo echo %~* > script.cmd 

> script "123" "456" 
The following usage of the path operator in batch-parameter 
substitution is invalid: %~* 


For valid formats type CALL /? or FOR /? 
script was unexpected at this time. 

私はこの作業を行うにはどうしたらよいですか?これについて私が気づいていない特別な構文はありますか?どんな助けもありがとう、ありがとう!

答えて

2

文字列から引用符を取り除くバッチスクリプトを作成しているとします。文字列は、通常のバッチ変数に格納されている場合

、あなたはこれを行うだろう:

set name="John"
echo %name:"=%

あなたの主張が間違っています。文字列値を扱うときのより良い規則は、"variable=value"のペアを引用符で囲んで常にset "variable=value"になり、の割り当てではなく、の検索に必要なときに明示的に引用符を追加します。たとえば、次のように

@echo off 
setlocal 

set "xml=<node>Text</node>" 
for /f "tokens=2 delims=<>" %%I in ("%xml%") do echo Text: %%I 

こうして、引用符は、変数の値に含まれていませんが、特別なものは何でも文字が不適切に解釈されるのを避けるために引用されています。これは実際にあなたが求めていることではありませんが、それはまだ練習に値する基本的な大会です。


文字列が位置パラメータに格納されている場合、あなたはこれを行うだろう:あなたはスクリプト引数で同じ効果を得るに行くかどう

echo %~1

、特に%*変数を?

確かに、あなたはなく、%*収集のため、数値インデックスで個々の引数にチルダ表記を使用することができます。あなたの謎を解決するには、for...inまたはshift...gotoループのいずれかを使用して%*を反復処理する必要があります。 for...inがより効率的な選択肢です。ここには、動作可能なソリューションへの100の可能なパスの1つがあります。

@echo off 
setlocal enabledelayedexpansion 

set "argv[0]=%~0" 
set idx=1 

for %%I in (%*) do (
    set "argv[!idx!]=%%~I" 
    set /a ubound = idx, idx += 1 
) 

for /L %%I in (0,1,%ubound%) do echo %%I: !argv[%%I]! 

rem // or you could also: 
rem // set argv[ 
関連する問題