我有一组名为的文件标题_十二月_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]))