dateinamen kürzen

  • hallo,

    ich hab ein problem, folgenede situation:

    es sind viele bilddateien, alles .jpg in einem ordner. diese haben alle wegen acrobat an dem ende "_Seite_1_Bild_0001.jpg" also im gesmten heißt eine datei z.b. so: "01-10 Testcover 16x21 isov21_Seite_1_Bild_0001.jpg". das möchte ich ändern und die endung durch "_150dpi_cmyk" ersetzen.

    dazu hab ich bisher folgendes geschrieben, aber irgendwie möchte das so nicht klappen...

    [autoit]

    ; Shows the filenames of all files in the current directory

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

    $search = FileFindFirstFile("C:\Dokumente und Einstellungen\Florian\Eigene Dateien\Eigene Bilder\" & "*.jpg")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    $result = Stringright($file, 8)
    FileMove("E:\Workflow\10x16\*.*", "E:\Workflow\Ausgabe\"&$result&"150dpi_cmyk.*",1);umbenennung
    ;MsgBox(0, "Leftmost 3 characters are:", $result)


    If @error Then ExitLoop
    ;MsgBox(4096, "File:", $file)
    WEnd

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

    ; Close the search handle
    FileClose($search)

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

    könnt ihr mit weiterhelfen?
    vielen dank
    albinono

    Einmal editiert, zuletzt von albinono (1. September 2009 um 14:32)

  • zeig doch einfach mal 2 oder 3 Dateinamen und das gewünschte Ergewbnis dazu, z.B.
    ABC_43_irgendwas.dti ==> ABC_43_änderung.dti
    Ich hab nämlich nicht genau verstanden, was du jetzt wie entfernen und ändern willst ;)

  • also die dateien heißen so:

    01-10 Testcover 16x21 isov21_Seite_1_Bild_0001.jpg
    04-130 Bildcover 19x24 isocoted_Seite_2_Bild_0001.jpg
    05-17 Bild2cover 10x16 adobecoated_Seite_1_Bild_0001.jpg

    so und die geänderten namen sollen so aussehen:

    01-10 Testcover 16x21 isov21_150dpi_cmyk.jpg
    04-130 Bildcover 19x24 isocoted_150dpi_cmyk.jpg
    05-17 Bild2cover 10x16 adobecoated_150dpi_cmyk.jpg

    wo ist da bei mir der fehler?

    Oscar , bestimmt ein schönes prog, aber ich brauch es ohne gui, bzw will ich es in mein script einbauen, ist also nur ein teil meines scripts wo ich grad hänge, deswegen ist ein fertiges programm mit gui hier der falsche ansatz

  • Dein Code nimmt die rechten 8 Zeichen vom Dateinamen und hängt da dann die Endung an.
    Zusätzlich verwendest du den Platzhalter * falsch. Im Dateiname darf er nicht vorkommen.
    Das FileMove verschiebt alle Dateien zu diesem neuen, falschen Namen, was eben nicht funktioniert.
    Das Umbenennen sollte im Endeffekt etwa so aussehen:

    Spoiler anzeigen
    [autoit]

    $Pfad = "E\x\y\z\" ; !!! Backslash am Ende

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

    $neueEndung = "_meine_Endung.jpg"

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

    $string = "01-10 Testcover 16x21 isov21_Seite_1_Bild_0001.jpg"
    $find = StringInStr($string, "_Seite_", 1, -1)
    $result = StringLeft($string, $find-1)

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

    $neuerName = $result & $neueEndung

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

    MsgBox(0, '', $neuerName)

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

    ; FileMove($Pfad & $string, $Pfad & $neuerName)

    [/autoit]
  • hm also ich hab meine art/verion nochmal bisschen umgeschrieben, jetzt klappt das umbenenne recht gut, nur hab ich jetzt den fehler, dass sobald 2 dateien oder mehr im ausgangsverzeichnis liegen, nur immer die 1. datei umbenannt wird, die anderen werden zwar gemoved, sind aber nicht im finalen verzeichnis zu finden, werden also irgendwie von geisterhand gelöscht? woran liegt das?

    hier mal der code:

    [autoit]

    ; Shows the filenames of all files in the current directory

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

    $search = FileFindFirstFile( "E:\Workflow\10x16\"& "*.jpg")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $result = Stringright($file, 8)
    FileMove("E:\Workflow\10x16\*.jpg", "E:\Workflow\Ausgabe\"&$result,1);umbenennung kürzung
    FileMove("E:\Workflow\Ausgabe\*.*", "E:\Workflow\Ausgabe\*_300dpi_cmyk.*",1); umbenennung anhang
    WEnd

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

    FileClose($search)

    [/autoit]

    was dabei auch noch bemerkenswert ist, das script beendet sich von selbst, also es kommt zu keiner endlosschleife, nur wie gesagt, es tauchen nicht alle dateien im finalen verzeichnis auf, die auch im ausgangsverzeichnis waren...

  • Hi,


    [autoit]

    #include <file.au3>
    $workdir = "E:\Workflow\10x16"
    $movedir = "E:\Workflow\Ausgabe"
    ;Shows the filenames of all files in the current directory
    $search = _FileListToArray ($workdir, "*.jpg", 1)
    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    For $i = 1 To UBound ($search) - 1
    FileMove ($workdir & "\" & $search [$i], $movedir & "\" & StringRight ($search [$i]) & "_300dpi_cmyk.jpg",9)
    Next

    [/autoit]


    ;-))

    Stefan

  • hi, danke, aber so geht das auch nicht. zum einen ist der check falsch, das aber nur nebensache...viel läuft das script überhaupt so nicht, es gibt nur errors...

    aber zum trost, ich hab meins cript dafür auch noch nicht weiter bekommen.

    was mich aber auch interresiert, wiso optimiert ihr nich mein script, oder behebt dort den fehler, sondern schreibt immer gleich ein ganz neues dafür...

  • Hi,

    was für Fehler bekommst Du denn?


    ;-))

    Stefan

    P.S: Ansonsten würde ich in Deinem Code das

    [autoit]

    FileMove("E:\Workflow\Ausgabe\*.*", "E:\Workflow\Ausgabe\*_300dpi_cmyk.*",1); umbenennung anhang

    [/autoit]

    aus der Schleife rausnehmen und nach der Schleife ausführen.

    2 Mal editiert, zuletzt von ojo (1. September 2009 um 11:48)

  • FileMove ($workdir & "\" & $search [$i], $movedir & "\" & StringRight ^Error, das ist der Fehler bei dir, also stimmt da irgendwas miot der eingabe nach dem string right nicht, ich glaib die variable $i passt da iwie nicht...

    wegen dem anderen vorschlag, das nach der schlaufe zu machen bring/macht auch keinen unterscheid, sobald mehr als eine datei in dem ausgangsordner ist, verschwinden alle dateien, auser dei erste, wie von geiterhand....kp warum.... oO
    hilfe..

    • Offizieller Beitrag

    Dein Script müsste so aussehen:

    Spoiler anzeigen
    [autoit]


    $search = FileFindFirstFile("E:\Workflow\10x16\" & "*.jpg")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $find = StringInStr($file, "_Seite_", 1, -1)
    $result = StringLeft($file, $find - 1)
    FileMove("E:\Workflow\10x16\" & $file, "E:\Workflow\Ausgabe\" & $result & "_300dpi_cmyk.jpg", 1)
    WEnd

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

    FileClose($search)

    [/autoit]
  • ne leider auch nicht, die umbennung klappt ja bei beimem script so wunderbar, wenn auch umständlich mit 2 moves, aber egal....
    vielmehr wird immer nur eine datei gemoved und sobald mehr als 1 datei im ausgangsverzeichnis ist verschwinden die anderen, soll heißen sie sind nicht mehr im ausgangsverzeichnis und auch nicht im endverzeichnis...

    Oscar , das ist auch bei dir der fall....leider
    aber danke trotzdem, hoffentlcih findet noch einer den fehler...oO

  • Hi,

    beim StringRight fehlt ein Parameter ( :cursing: :(

    Falsch:

    [autoit]

    FileMove ($workdir & "\" & $search [$i], $movedir & "\" & StringRight ($search [$i]) & "_300dpi_cmyk.jpg",9)

    [/autoit]


    Richtig:

    [autoit]

    FileMove ($workdir & "\" & $search [$i], $movedir & "\" & StringRight ($search [$i], 8) & "_300dpi_cmyk.jpg",9)

    [/autoit]

    Dann sollte es funktionieren!

    ;-))

    Stefan

    P.S:
    Dein Code müsste so funktionieren (Änderung Ende While Schleife):

    [autoit]

    FileMove("E:\Workflow\10x16\" & $file, "E:\Workflow\Ausgabe\"& $result, 1);umbenennung kürzung
    WEnd
    FileMove("E:\Workflow\Ausgabe\*.*", "E:\Workflow\Ausgabe\*_300dpi_cmyk.*",1); umbenennung anhang

    [/autoit]

    Du hattest beim 1.ten FileMove ein *.jpg stehen. Das hat alle *.jpg auf eine Datei kopiert. Die letzte hat gewonnen.

    3 Mal editiert, zuletzt von ojo (1. September 2009 um 13:05)

  • ohei danke, perfekt jetzt endlich funktionierts.....wie man den fehler immer übersehen hat obwohl er eig einen hätte anspringen müssen...oO
    DANKE