• Offizieller Beitrag

    In "Hilfe & Unterstützung" geht es ja gerade um ein Programm zum Umbenennen von Dateien. Das hat mich auf die Idee gebracht, dass man sowas gut für die eigene Bildersammlung gebrauchen könnte.
    Also habe ich mich mal rangesetzt und einen FileRenamer programmiert.

    Version 2.1 ( 06.03.09 )

    Noch kurz etwas zur Bedienung:

    Nach Auswahl eines Quellverzeichnisses werden alle Dateien mit der eingestellten Dateiendung in das Listview aufgenommen. Dort können dann die Dateien, die bearbeitet werden sollen, mit einem Haken versehen werden.

    Danach gibt man im Feld "Eingabe des neuen Dateinamen" den neuen Dateinamen ein, wobei einige Platzhalter (siehe ToolTip) zur Verfügung stehen. Dann kann man noch den Zählerstartwert sowie die Zieldateiendung festlegen.

    Im grünen Feld am unteren Fensterrand erscheint eine Vorschau auf den neuen Dateinamen. Diese Vorschau wird dynamisch den Eingaben entsprechend angepasst.

    Nun gibt es drei verschiedene Modi:
    1. Quell- und Zielverzeichnis sind gleich = dann werden die ausgewählten Dateien im Quellverzeichnis umbenannt.

    2. Quell- und Zielverzeichnis sind unterschiedlich, dann entscheidet der Menüeintrag "Verschieben statt Kopieren" im Menü "Einstellungen" über die weitere Vorgehensweise:

    2 a) Der Haken bei "Verschieben statt Kopieren" ist nicht gesetzt = die ausgewählten Dateien werden unter dem neuen Dateinamen ins Zielverzeichnis kopiert.

    2 b) Der Haken bei "Verschieben statt Kopieren" ist gesetzt = die ausgewählten Dateien werden unter dem neuen Dateinamen ins Zielverzeichnis verschoben.


    Die umbenannten Dateien bekommen als neuen Dateinamen den Namen, der bei "Eingabe des neuen Dateinamen" eingetragen ist. Hierbei stehen einige Platzhalter (siehe History) zur Verfügung. Wird kein Platzhalter für den Zähler eingetragen, so wird der Zähler automatisch ans Ende des neuen Dateinamens gesetzt. Das Programm überschreibt dabei eine evtl. vorhandene Datei mit diesem neuen Namen nicht, sondern erhöht stattdessen den "Zähler" um eins .

    Weitere Besonderheit ist, dass das Programm den Zähler automatisch mit führenden Nullen auffüllt, sodass die richtige Sortierung im Explorer gewährleistet ist. Das funktioniert auch dann, wenn man z.B. 3 Dateien ausgewählt hat und den Startwert des Zählers auf 998 stellt. Das Programm erkennt dann, dass der Zähler vierstellig wird und passt ihn entsprechend an.

    Edit (03.03.2020): Screenshot und ZIP-Archiv neu hochgeladen (aufgrund von einem Forem-Update waren die Anhänge weg).


    Screenshot:

    History
  • Folgende Dateien hab ich nach dem Umbenennen:
    abc_45.bmp
    abc_046.bmp
    Da passt was mit den führenden Nullen nicht.

    Ich nutze seit langem ein anderes Tool zum Umbenennen. Das hat ein sinnvolles Feature:
    Unzwar kann man dort beim neuen Namen den Platzhalter # für die laufende Nummer einfügen.
    Bsp:
    neuer Dateiname: vor_#####_nach
    Daraus wird die Datei vor_00001_nach.endung umbenannt.

  • Problem besteht weiterhin.

    Mein Tipp hast du für mich etwas unglücklich umgesetzt. Entweder du begrenzt die Eingabe auf ein * oder du setzt anhand der Anzahl der Sternchen die Zahl der führenden Nullen: *** entspricht einer laufenden Nummer mit mind. 3 Stellen.

    Edit: Bei einer Anzahl von 50 bis 99 Dateien im Ordner gibt es Probleme mit den führenden Nullen.

    • Offizieller Beitrag

    Ja, das ist eine Einschränkung von _FileListToArray() bzw. FileFindFirstFile().
    Aus der Hilfe:

    Zitat

    When using a 3-char extension any extension starting with those 3 chars will match

    Ich müsste eine eigene Routine schreiben, um das zu umgehen. Ich weiß noch nicht, ob das so zwingend nötig ist... ^^

  • Gefällt mir gut dein Tool. Kann ich ab und zu gebrauchen.
    Ich habe noch ein Verbesserungsvorschlag und zwar könnte man eine Syntax angeben, wie der neue Name zu lauten hat.

    Mit Datum, Zeit, und wie du ja schon eingebaut hast mit Durchnummerierung.

    Als Tags werden die allgemein genutzten Platzhalter wie:

    - Original Name: %s
    - Jahr: YYYY( 2009 ) oder YY( 09 )
    - Monat: MM ( z.B. 02 )
    - Tag: DD ( z.B. 28 )
    - Zähler: #### ( für die länge des Zahlenstrang )

    verwendet.

    Also: %s_YYYYMMDD_####
    Wäre: BILDNAME_20090301_0001

    Hier mal ein Beispiel wie sich das Lösen liese:

    Spoiler anzeigen
    [autoit]


    Global $PRINTF_LINENR = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ printf('###########################################################')
    ;~ printf('printf example')
    ;~ printf('###########################################################')
    ;~ printf()
    ;~ printf('YY-MM-DD_%s_%s', 'foo', bar')
    ;~ printf('DD-MM-YYYY_%s_%s', 'bar', 'foo')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')
    ;~ printf('###########################################################')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func printf($format='', $var1='', $var2='', $var3='', $var4='', $var5='', $var6='', $var7='')
    Local $str = $format
    Local $ret
    Local $year

    $year = String(@YEAR)
    $ret = StringRegExp($str, '(Y{1,4})', 3)

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error And IsArray($ret) Then
    If StringCompare($ret[0], 'YYYY', 1) == 0 Then
    $str = StringReplace($str, 'YYYY', @YEAR)
    ElseIf StringCompare($ret[0], 'YY', 1) == 0 Then
    $str = StringReplace($str, 'YY', StringTrimLeft($year, 2))
    EndIf
    EndIf
    If StringInStr($str, 'MM', 1) Then $str = StringReplace($str, 'MM', @MON)
    If StringInStr($str, 'DD', 1) Then $str = StringReplace($str, 'DD', @MDAY)

    $str = StringFormat($str, $var1, $var2, $var3, $var4, $var5, $var6, $var7)
    ConsoleWrite('->LN:' & $PRINTF_LINENR & @TAB & '' & $str & @CRLF)
    $PRINTF_LINENR += 1
    Return $str
    EndFunc

    [/autoit]
  • Habe das Programm ein wenig getestet, gefällt!

    Drei Kleine Dinge noch ->

    1. Wenn man die *.au3 Kompiliert, dann bekommt die *.exe das Icon nicht.
    2. In der Titelleiste ist ein anderes Icon, ob das so gewünscht ist weiss ich nicht ^^

    Das ist meine Idee, soll ja nicht heissen, dass es sein muss :)
    3. Evt. die billigen Sonderzeichen, die kein geübter PC-User mag, blockieren.

    • Offizieller Beitrag

    @prizma: Deinen Vorschlag fand ich ganz gut. Hab ihn allerdings etwas abgeändert (statt des aktuellen Datums, was man ja auch von Hand eintragen kann, habe ich das jeweilige Erstellungsdatum der Datei genommen). %s für den alten Dateinamen habe ich aber benutzt und der Platzhalter für den Zähler ist jetzt "#".

    @satinez: Du musst das ZIP-Archiv downloaden, denn dort befindet sich das Icon. Das mit dem anderen Icon in der Titelleiste habe ich geändert (war noch bevor das Programm-Icon dazukam). Aber was meinst Du mit "billigen Sonderzeichen"?


    Neue Version (siehe Post#1).

  • Das mit dem Einstelldatum halte ich für eine Super Idee. Werde das Tool demnächst mal auf der Arbeit testen.

  • Jo ups sorry mein Fehler ich dachte du hast es so geregelt, dass es das Icon beim "einfachen" Kompilieren nimmt.
    Das mit den "billigen Sonderzeichen" meinte ich z.B. ^ ' ? `| \ usw. du weisst schon, solche "sollten" nicht in eine Datei gehören :)
    EDIT: Beim Zähler habe ich gemerkt das er ins negative gehen kann, :wacko:

    • Offizieller Beitrag

    Ich finde das Tool erstklassig , super Arbeit Oscar. Habe noch einen Verbesserungsvorschlag: Nützlich wäre es wenn eine manuell eingegebene Dateiendung automatisch in der INi abgespeichert wird. Muß zwar nicht umbedingt sein, kann man ja auch per Hand anpassen,wäre aber ein sinnvolles Feature.Noch eine weitere gute erweiterung wäre es wenn man den Speicherpfad wählen kann. Es wäre dann zwar auch eine Art Kopierprogramm aber noch besser zu verwenden . Aber sonst :thumbup:8o

    • Offizieller Beitrag

    Hab noch eine Feature-Idee : Es würde auch gut kommen wenn man im LIstView die umzubenenneden Dateien auswählen kann . Dann kann man es noch Universeller benutzen. Ist wieder nur ein Vorschlag, weiß ja nicht ob du das Tool noch soweit ausbauen willst. :D