批次檔重命名腳本交換檔名中的子字串?

批次檔重命名腳本交換檔名中的子字串?

我有一組名為title_december_word1_word2.png並希望遍歷目錄並在每個文件內交換word1和。word2

即從"button_december_state_pressed.png" -> "button_december_pressed_state.png"

關於我如何實現這一目標有什麼建議嗎?

我發現的大多數 OS X 批次程式都無法指定一個字元來分解單詞,我希望有人可以幫助我使用一個快速腳本來解決這個問題。

答案1

嘗試rename使用 util.它使用sed語法來替換名稱

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,您可以毫無問題地測試程式碼。如果輸出正常,則刪除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']

或者你可以使用格式和/或 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]))

相關內容