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バッチプログラムを作成する際のエラーの一般的な原因です。