表題どおり。
MaxscriptでWindowsのスペシャルフォルダを取得してみる。
コレが以外にクセがあってめんどくさかった・・・・。
折角なら$XXXで始まるパス列挙にWindowsのフォルダあっても良いじゃん、
けちだなぁMaxは。
-- 従来の方法 $xxxx でパスを取得できる -- https://help.autodesk.com/view/3DSMAX/2017/JPN/?guid=__files_GUID_0EE531B2_6FF8_4D0B_ACA1_5400E0B9D604_htm print(symbolicPaths.getPathValue "$max"); -- .Netを使ってwindowsのスペシャルフォルダを取得する speFld = dotNetClass "System.Environment+specialFolder"; sysEnv = dotNetClass "System.Environment"; --ret = sysEnv.getfolderPath speFo.commonApplicationData; -- こうするとプログラムファイルのパスをだす ret = sysEnv.getfolderPath speFld.MyDocuments; print(ret); -- Pythonで今のファイルのパスとかマイドキュメントのパスを -- 注意事前にosとsysをインポートすること! -- あとこれ以下はMax2018でないと動かない、試す人はコメントアウトを外して実行 python.Execute("import os"); python.Execute("import sys"); --python.Execute("print(os.path.abspath(sys.argv[0]))"); --py = "print(os.environ.get(\"USERPROFILE\") + \"\\Documents\")"; --python.Execute(py)
python.Executeだと実行結果が成功したのか?失敗したのか?
というreturnしか受け取れないので、直接pythonを使ってパスを読み取ろうとするなら
イチイチ実行するpythonまでのパスを通しておいてpython.importを使うのが常套句なんだけれど
結局pythonのパスとうすのカヨ、めんどくせぇな。って事で回りくどくてそのままじゃ使えない。
http://help.autodesk.com/view/3DSMAX/2018/JPN/?guid=__files_GUID_E9BA617D_50E5_447F_997B_4F640F1110BA_htm
一番手っ取り早いのはどうやら dotNetClass を使うやり方らしい。
ちなみに、 DOSCommand とか ShellLaunchでも取得できないか試してみたけれど、
returnで標準出力を取得したり出来ないっぽいのであきらめた。
もしやるならpythonでdos叩いてリターン拾うのが手っ取り早いかも。
って結局python経由かよ、コンチキショー・
と言うことで
以上今日のメモでした!