見出し画像

【MEL】リネームツール【配布】

仕事の合間に作成していたリネームツールを配布します。

案件によって外部のツールが使えない場合があるので自作したやつです。ほかのところを探せばもっと多機能だったり痒いところに自在に手が届くものがあると思いますが自分が作業をしていて必要十分な機能に収めています。
「特定の文字と入れ替え」がmayaの標準機能なのは自分でわざわざつくるよりもそっちのほうが使い勝手がいいからですね。

UUIDで選択しているので別階層で名前の重複があっても問題なく機能します。 作ってから気づきましたがわざわざMELでUUIDを指定しなくてもPythonで書けばよかったのかもしれない……

UI

下記コードをコピーしてscriptEditorにペーストするか、下記melファイルをダウンロードしてscriptEditorにドラッグ&ドロップしてください。

/// 連番処理
proc RenBanRename()
{
    string $sel[] = `ls -sl -uuid` ;  /// UUIDで取得
    string $name = `textField -q -tx Renban` ;
    int $n = `intField -q -v intF` ;  /// 連番処理の開始番号
    string $val = `optionMenu -q -v opMenu` ; /// 連番処理の方法
    string $New ; /// 新しい名前
    for($selection in $sel)
    {
        if($val == "1") /// 1桁の処理
        {
            $New = ($name + $n) ;
            rename (`ls $selection`) $New ;
            $n++;
        }
        else if($val == "01") /// 2桁の処理
        {
            if($n < 10)
            {
                $New = ($name + "0" + $n) ;
            }
            else
            {
                $New = ($name + $n) ;
            }
            rename (`ls $selection`) $New ;
            $n++;
        }
        else if($val == "001") /// 3桁の処理
        {
            if($n < 10)
            {
                $New = ($name + "00" + $n) ;
            }
            else if(10 <= $n < 100)
            {
                $New = ($name + "0" + $n) ;
            }
            else if(100 <= $n)
            {
                $New = ($name + $n) ;
            }
            rename (`ls $selection`) $New ;
            $n++;
        }
        if($val == "ABC")
        {
            string $alpha[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"} ;
            int $numA = 26 ;  /// アルファベットの数
            int $numB = 702 ; /// 2桁のアルファベットの組み合わせ(26*26) + 1桁のアルファベット数(26)
            
            if($n < $numA+1) /// 1桁の組み合わせ
            {
                $New = ($name + $alpha[$n-1]) ;
                rename (`ls $selection`) $New ;
                $n++;
            }
            else if($n < $numB+1) /// 2桁の組み合わせ
            {
                $New = ($name + $alpha[($n-$numA-1)/$numA] + $alpha[($n-1)%$numA]) ;
                rename (`ls $selection`) $New ;
                $n++;
            }
            else if($numB+1 <= $n) /// 3桁の組み合わせ
            {
                string $number = ($alpha[($n/$numB)-1] + $alpha[($n-1)/$numA%$numA-1] + $alpha[($n-1)%$numB%$numA]) ;
                $New = ($name + $number) ;
                rename (`ls $selection`) $New ;
                $n++;
            }
            
        }
    }
}

/// 文字列の前に挿入
proc PrefixRename()
{
    string $sel[] = `ls -sl -uuid` ; /// UUIDで取得
    string $pre = `textField -q -tx pre`;
    string $name ; /// 新しい名前
    for($selection in $sel)
    {
        string $get[] = `ls $selection` ;
        $name = ($pre + $get[0]) ;
        rename (`ls $selection`) $name ;
    }
}

/// 文字列の後に挿入
proc SuffixRename()
{
    string $sel[] = `ls -sl -uuid` ; /// UUIDで取得
    string $suf = `textField -q -tx suf`;
    string $name ; /// 新しい名前
    for($selection in $sel)
    {
        string $get[] = `ls $selection` ;
        $name = ($get[0] + $suf) ;
        rename (`ls $selection`) $name ;
    }
}

/// 先頭の文字を大文字化
proc capitalize()
{
    string $sel[] = `ls -sl -uuid` ; /// UUIDで取得
    string $new ; /// 新しい名前
    
    for($selection in $sel)
    {
        string $get[] = `ls $selection` ;
        string $new = `capitalizeString($get[0])` ;
        rename (`ls $selection`) $new ;
    }
}

proc TKN_renameUI()
{
    if(`window -ex TKN_renameUI` == true) deleteUI TKN_renameUI ;
    window -t "TKN_rename_v1.0.5" -tlb true TKN_renameUI ;
    
    columnLayout ;
    
    rowLayout -nc 2;
    intField -w 30 -v 1 intF ;
    optionMenu -label "命名規則" opMenu;
            menuItem -label "1";
            menuItem -label "01";
            menuItem -label "001";
            menuItem -label "ABC";
            setParent ..;
    setParent ..;
    
    rowLayout -nc 2 ;
    textField Renban ;
    button -l "連番" -w 50 -c "RenBanRename()" ;
    setParent ..;
    
    rowLayout -nc 2 ;
    textField pre ;
    button -l "前に" -w 50 -c "PrefixRename()" ;
    setParent ..;
    
    rowLayout -nc 2 ;
    textField suf ;
    button -l "後ろに" -w 50 -c "SuffixRename()" ;
    setParent ..;
    
    button -l "特定の文字と入れ替え" -w 150 -c "SearchAndReplaceNames;" ;
    
    button -l "先頭の文字を大文字化" -w 150 -c "capitalize()" ;
    
    showWindow ;
}
TKN_renameUI() ;


普段仕事で作成するツールってあたってる案件に最適化したものばっかりだったりするから意外と今回みたいに汎用的なツールって作らないんですよね。
またなにか汎用的なものができたら配布しようと思います。




※個人/商用 問わず無償で使用可能です。
※このscriptの使用によって起きたいかなる問題について一切の関与をいたしません。すべて自己責任の下お願いいたします。

この記事が気に入ったらサポートをしてみませんか?