Maxscriptでディレクトリごとコピーする方法


copyFileならファイルはコピーできるけれど・・・
ディレクトリごと丸々コピーしてくれないよね~~・・・

ということで、

Maxscriptでディレクトリごとコピーするには?

pythonを使う方法と、コマンドを使う方法2つ。
ほかに考えられるのは・・・。
たとえばコピーを実行するjsを書いたファイルをコマンドで実行させるとか?
ですかね~。

fromPath = "D:\\test";
toPath = "D:\\test_copy";

-- ファイルであればcopyFileで問題なし ただし事前にコピー先消しておくこと
-- copyFile fromPath toPath;

/**
 * pythonを使う shutil.copytreeは既にディレクトリがあるとコピー失敗する
 * distutilsはコピーしたものの一覧を返してくれる
 */
function CopyDirByPy fromPath toPath =
(
    if (doesFileExist toPath) then (
        distutils = python.Import("distutils.dir_util");
        distutils.copy_tree fromPath toPath;
    ) else (
        shutil = python.Import("shutil");
        shutil.copytree fromPath toPath;
    )
)

/**
 * コマンドとxcopyを使う
 */
function CopyDirByCmd fromPath toPath =
(
    -- 上書きでなく完全一致させるならrobocopyを使っちゃう
    cmd = "echo D| xcopy /Y /E \"" \
        + fromPath \
        + "\" \"" \
        + toPath \
        + "\"";
    HiddenDOSCommand cmd donotwait:false;
)

-- CopyDirByPy fromPath toPath;
CopyDirByCmd fromPath toPath;

pythonの場合、shutil か distutils.copy_tree を使う。
shutilの場合は既にコピー先にディレクトリがあった場合失敗するので
変わりにdistutils.copy_treeを使う。
shutil一本でいくなら、事前にディレクトリをまるっと削除しておく必要がある。

で、

ぶっちゃけ上書きどーん!

みたいな感じで行きたかったので

コマンドでxcopyを使ってみた。

xcopyをrobocopyに変えればさらに堅牢なコピーが出来ると思う。
これもしかしたらMayaでも同じ方法でいけるんでねーか?

一応GitHubにも上げといた

ということで、今日のメモでした~。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください