Ich habe eine Gruppe von Dateien mit dem Namentitle_Dezember_Wort1_Wort2.pngword1
und möchte das Verzeichnis und den Swap- Bereich word2
innerhalb jeder Datei durchlaufen .
d.h. gehen Sie von"button_december_state_pressed.png" -> "button_december_pressed_state.png"
Irgendwelche Vorschläge, wie ich das erreichen könnte?
Die meisten Batchprogramme, die ich für OS X gefunden habe, können kein Zeichen zum Aufteilen von Wörtern angeben und ich hoffte, dass mir jemand mit einem kurzen Skript helfen könnte, dieses Problem zu lösen.
Antwort1
Versuchen Sie rename
util. Es verwendet sed
Syntax, um Namen zu ersetzen
rename 's/old-name/new-name/' files
Der Befehl sieht ungefähr so aus
rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png
Antwort2
versuchen Sie die kleinenumbenennen-regulärer Ausdruck(keine Installation):
rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"
Antwort3
Bearbeiten: Hier ist ein Batch-Code, um dies zu tun. Kopieren Sie diesen Code und fügen Sie ihn in die Datei „Swap.bat“ ein.
@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
Ich habe ein echo
vor das eingefügt ren
, damit Sie den Code problemlos testen können. Wenn die Ausgabe in Ordnung ist, entfernen Sie dasecho
Antwort4
Es ist nicht schön, aber ich denke, es tut, was Sie wollen, wenn sich alle Ihre Dateien im selben Ordner befinden.
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']
oder können Sie das Format und/oder eine For-Schleife verwenden?
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]))