実現したいこと
windowsバッチで、csvのリストファイルの値に応じて変化させた変数をpythonを呼ぶ際の引数として渡したい。
前提
発生している問題・エラーメッセージ
windowsバッチからpytonを呼び出す際に遅延環境変数を引数として渡すときに、うまく引数が渡されません。
下記のソースのように呼び出し先で引数を表示させるだけでしたら正常に値を表示してくれますが、実際に行いたいpythonのスクリプトは与えられた引数をもとにAzureのBlobストレージへ対象のフォルダ・ファイルをアップロードするというもので、!で囲まれた変数名をそのまま引数として渡しているように見えます。(業務に関するものなので詳細には記載できません)
コマンドプロンプト上では↓のように表示されているのですが、「python test2.py !変数1! !変数2! !変数3! 言語」の行で変数が!で囲まれたまま別のバッチ等を呼ぶのは正常な動作なのでしょうか?
C:\Users\batche>( if b == a ( set 変数1=アメリカ_2024/04/21 set 変数2="こんにちは" set 変数3="こんばんは" ) else if b == b ( set 変数1=アメリカ_2024/04/21 set 変数2="hello" set 変数3="Good evening" ) python test2.py !変数1! !変数2! !変数3! 言語 ) test2.py アメリカ_2024/04/21 hello Good evening 言語
該当のソースコード
list.txt
1a,日本 2b,アメリカ
test.bat
1setlocal enabledelayedexpansion 2for /f "tokens=1-2 delims=," %%i in (list.txt) do ( 3 if %%i==a ( 4 set 変数1=%%j_%date% 5 set 変数2="こんにちは" 6 set 変数3="こんばんは" 7 ) else if %%i==b ( 8 set 変数1=%%j_%date% 9 set 変数2="hello" 10 set 変数3="Good evening" 11 ) 12 13 python test2.py !変数1! !変数2! !変数3! %変数4% 14) 15endlocal
test2.py
1import sys 2 3if __name__ == "__main__": 4 param = sys.argv 5 for p in param: 6 print(p)
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント