Batch-Datei-Umbenennungsskript tauscht Teilzeichenfolgen im Dateinamen aus?

Batch-Datei-Umbenennungsskript tauscht Teilzeichenfolgen im Dateinamen aus?

Ich habe eine Gruppe von Dateien mit dem Namentitle_Dezember_Wort1_Wort2.pngword1und möchte das Verzeichnis und den Swap- Bereich word2innerhalb 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 renameutil. Es verwendet sedSyntax, 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 echovor 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]))

verwandte Informationen