ファイル名の部分文字列を交換するバッチファイル名変更スクリプト?

ファイル名の部分文字列を交換するバッチファイル名変更スクリプト?

次のような名前のファイルグループがありますタイトル_12月_word1_word2.pngディレクトリとスワップword1word2各ファイル内で反復処理したいと考えています。

つまり、"button_december_state_pressed.png" -> "button_december_pressed_state.png"

これを実現する方法について何か提案はありますか?

OS X 用のバッチ プログラムのほとんどは、単語を分割するための文字を指定できないため、この問題を解決する簡単なスクリプトで誰かが助けてくれることを期待しています。

答え1

utilを試してくださいrenamesed名前を置き換える構文を使用します

rename 's/old-name/new-name/' files

コマンドは次のようになります

 rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png

答え2

小さいものを試してみて名前変更正規表現(インストール不要):

rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"

答え3

編集: これを行うためのバッチ コードは次のとおりです。このコードをコピーして、「Swap.bat」ファイルに保存します。

@ECHO OFF

for %%a in (*.png) do (
     for /f "tokens=1,2,3,4 delims=_" %%b in ('echo %%~na') do (
        echo ren "%%a" "%%b_%%c_%%e_%%d%%~xa"))
Pause

echo問題なくコードをテストできるように、の前にを入れましたren。出力がOKなら、 を削除してください。echo

答え4

見た目は良くないですが、すべてのファイルが同じフォルダにある場合は、これで十分だと思います。

import os

files = os.listdir(os.getcwd())

[os.rename(i,
    '_'.join([i.split('_')[0],
        i.split('_')[1],
        i.split('_')[3][:-4],
        i.split('_')[2]+
        '.png'])) for i in files if len(i.split('_')) == 4 and i[-3:] == 'png']

または、format や for ループを使用できますか?

for fileName in files:
    if fileName[-4:] == '.png':
        words = fileName[:-4].split('_')
        os.rename(fileName,
            '{0}_{1}_{2}_{3}.png'.format(words[0],
                words[1],
                words[3],
                words[2]))

関連情報