遅延環境変数を引数とする方法がわからない

勘違いでしょうね。

「python test2.py !変数1! !変数2! !変数3! 言語」の行で変数が!で囲まれたまま別のバッチ等を呼ぶのは正常な動作なのでしょうか?

コマンドのエコー表示は、構文解析時の物なので、変数の値は取り出す前の表示です。
CMD.EXEがコマンドを起動する際に展開されます。
%による変数展開は、Cで言うマクロ展開みたいな物なので、まず展開してから構文解析されるので、展開後がエコー表示されますが。

実際に実行されるコマンドラインを見たい時は、自分でechoします。

CMD

1 echo python test2.py !変数1! !変数2! !変数3! %変数4% 2 python test2.py !変数1! !変数2! !変数3! %変数4%

結果を見れば、展開後にコマンドが起動されていることが分かると思います。
つまりPythonスクリプト内の問題です。現象が書かれてないので、これ以上は言い様がないですが。

例えば、引数引き渡し時点の間違い例としては、

CMD

1setlocal enabledelayedexpansion 2set ARG1=aa bb 3set ARG2=cc 4set ARG3=dd 5python test2.py !ARG1! !ARG2! !ARG3!

だと、sys.argv["aa","bb","cc","dd"]ですが、["aa bb","cc","dd"]だと勘違いしているとか。
この場合だとバッチ側の間違いで、python test2.py "!ARG1!" "!ARG2!" "!ARG3!"ですね。

参考:
%による展開→構文解析→エコー表示→!による展開→実行と分かる例:

CMD

1setlocal enabledelayedexpansion 2set AAAAA=if 1==1 date/t 3 4@echo AAAAA の値は "%AAAAA%" 5@echo AAAAA の値は "!AAAAA!" 6 7%AAAAA% 8!AAAAA!

最後がエラーになるのはif等の構造を持った文の構文解析を、!による展開後に再度行わないため。

コメントを投稿

0 コメント