回答(1件)

0

こんにちは、 前回の回答者さんの Call の使い方ですが、 その前に、、 echo %% とすると、%を表示できます。 %は、%1 とか、%X% のように、引数や変数を展開するための記号として使われているので、% 自体を表示するには %% のように2個続けることで表示します。 call はもともとはバッチファイルやサブルーチンを呼び出すコマンドです。 しかし、実はそれ以外のほとんどのコマンドも実行可能です。 echo abc call echo abc notepad call notepad set a=123 call set a=123 これらそれぞれの2行は同じ結果になります。 ただ違うのは以下の場合です。 set X=abcdefg echo %%X%% call echo %%X%% この場合の結果は、 %X% abcdefg という表示となります。 ???って思いませんか? どういうことかといいますと、call は call に続く文字列を一度「文字列として処理してから」、改めて「コマンドとして実行」しようとします。 上記の call echo %%X%% は、call に続く文字列「echo %%X%%」をまず最初に「文字列として処理」します。 % が2つ続いているのでこれを処理して、「echo %X%」という文字列になります。 call はこれをさらにコマンドとして実行します。 「echo %X%」なので、X の内容が表示されます。 また、% が2つ続いているのを処理する以外に変数も処理します。 call echo %%X%%、%X% とすると、%%X%% の部分は、%X% となり、そのあとに続く %X% の部分は変数 X が展開されて、abcdefg となります。つまりコマンドとして渡されるのは、「echo %X%、abcdefg」です。 なので、最終的にはこのコマンドが実行されて「abcdefg、abcdefg」と表示されます。 以上で、前回の回答者さんの Call の謎が解けると思います。 call set Y=%%X:~%m%,%n%%% まず、%% の処理を行ってから変数展開が行われます。そしてコマンドとして実行されます。 あとは説明しなくてもわかりますよね? (実は、私も call コマンドのこの動きは初めて知りました。質問を読んでちょっと研究してから、えらそうに回答させていただきました。ゴメンナサイ)