2つの問題があります。デフォルトでは、括弧内のステートメントのグループでは、set
コマンドの前に、変数の展開が一度に実行されます。また、のセマンティクスset
が間違っているため、の前後にスペースは必要ありません=
。
これをファイルの先頭に追加します。
setlocal ENABLEDELAYEDEXPANSION
=
の周りのスペースを削除しますset
:
set is=%2
最後に使用された遅延拡張:
echo. !is!
SHIFT
考えられる3番目の問題は、2つのsが必要になる可能性があることです。1つは引数用-i
、もう1つはis
引数用です。
アップデート
の構文エラーではないことを指摘してくれた@dbenhamに感謝しますset
。これは、少し説明するに値する驚くべき動作です。これらのコマンドを実行する場合:
set a=one
echo "%a%"
結果は次のとおりです。
"one"
それは理にかなっていますが、試してみてください。
set b = two
echo "%b%"
そして、あなたは得る:
"%b%"
何?b
これは、環境変数が設定されていない場合に予想されることです。しかし、私たちはそれを設定しただけです。または私たちがしました:
echo "%b %"
表示:
" two"
Windowsset
コマンドの場合、私が知っている他の言語や環境とは異なり、スペースは重要です。前のスペース=
は環境変数名の一部になり、後のスペースは値の一部になります。この珍しい動作は、Windowsバッチプログラムを作成する際のエラーの一般的な原因です。