批处理文件重命名脚本交换文件名中的子字符串?

批处理文件重命名脚本交换文件名中的子字符串?

我有一组名为的文件标题_十二月_word1_word2.png并想要遍历目录并在每个文件内进行word1交换。word2

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

关于我如何实现这一目标,有什么建议吗?

我发现 OS X 的大多数批处理程序都无法指定字符来分解单词,我希望有人可以帮助我编写一个快速脚本来解决这个问题。

答案1

尝试使用renameutil。它使用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]))

相关内容