>>608
call :sub %%iのところで、変数の内容をスペースごとに切って
別々の値として%1 %2に設定されてしまいます。これを一つの文字列として
渡す方法があるんでしょうか?"%%i"とするのはだめでした。
これですと結局
:sub
set PATH=!PATH!"%1"
for %%j in (%2 %3 %4 %5) do (
if not "%%j" == "" set PATH=!PATH!" %%j"
)
set PATH=!PATH!;
と遅延評価が必要になってしまいますよね。

>>606
やりたいこととしては、コマンドからバッチをcall、バッチプログラムから呼び出しと
どちらからでも使えるような環境変数設定用バッチファイルを書きたいのですが、
なかなか難しいです。