Änderungsdatum und Uhrzeit von Files verändern

Dieses Thema im Forum "Scripting und Automatisierung" wurde erstellt von willfried, 04.02.2006.

  1. willfried

    willfried Thread Starter MacUser Mitglied

    Beiträge:
    136
    Zustimmungen:
    0
    MacUser seit:
    30.01.2005
    Hallo Forum,
    Wie kann ich in AppleScript allen Files in einem Folder ein neues Änderungsdatum geben? Mit folgendem Code bekomme ich leider einen Stack Overflow in der fett gedruckten Zeile:

    tell application "Finder" to set the source_folder to (folder of the front window) as alias

    set the item_list to list folder source_folder without invisibles

    repeat with i from 1 to number of items in the item_list
    set this_item to item i of the item_list
    set this_item to (source_folder & this_item) as alias
    set modification date of this_item to (current date)
    end repeat
     
  2. chebfarid

    chebfarid MacUser Mitglied

    Beiträge:
    894
    Zustimmungen:
    75
    MacUser seit:
    05.10.2005
    Ich glaube das hat damit zu tun, daß Du versuchst das Datum durch "Apple Script selbst" zu verändern und nicht durch den "Finder", in dessen Bereich solche Aufgaben besser aufgehoben sind. Wenn Du Dein Script wie folgt veränderst, sollte es klappen:
    Code:
    tell application "Finder"
    	set the source_folder to (folder of the front window) as alias
    	set the item_list to list folder source_folder without invisibles
    	repeat with i from 1 to number of items in the item_list
    		set this_item to item i of the item_list
    		set this_item to ((source_folder & this_item) as string) as alias
    		set modification date of this_item to (current date)
    	end repeat
    end tell
    Good scripting
    Farid
     
  3. willfried

    willfried Thread Starter MacUser Mitglied

    Beiträge:
    136
    Zustimmungen:
    0
    MacUser seit:
    30.01.2005
    Hallo Farid,
    Danke für den Tip! Ich habe den Code angepasst, und jetzt klappt es fast. Ich habe festgestellt, dass ich das Erstellungsdatum ändern muss. (Die Änderung des Änderungsdatums hat leider nicht den gewünschten Effekt gebracht.) Wie mache ich denn das? "creation date" ist leider nur r/o :(

    By the way: kennst Du eine gute Referenz für AppleScript? AppleScript von Goldstein ist mir zu unübersichtlich. Programmieren in C / C++ und VisualBasic bin ich gewohnt. Ich suche ein richtig gutes Buch zu AppleSkript. Es darf ruhig ein "Wälzer" sein.
     
    Zuletzt bearbeitet: 04.02.2006
  4. chebfarid

    chebfarid MacUser Mitglied

    Beiträge:
    894
    Zustimmungen:
    75
    MacUser seit:
    05.10.2005
    Ciao Willfried,
    als Buch kann ich Dir guten Gewissens "AppleScript - The definitive guide" von Matt Neuburg empfehlen: http://www.oreilly.com/catalog/applescpttdg/index.html .
    Was Dein Script-Problem angeht: wenn ich mich recht erinnere ist "creation date" read-only, d.h. via AppleScript nicht veränderbar. Eventuell läßt sich das umgehen, indem man Kopien der Files anlegt. Sitze in diesem Moment vor einem Win-Rechner und kann es deshalb nicht überprüfen :rolleyes:

    Frohes scripten
    Farid
     
  5. chebfarid

    chebfarid MacUser Mitglied

    Beiträge:
    894
    Zustimmungen:
    75
    MacUser seit:
    05.10.2005
    Die unerschoepfliche Fundgrube macscripter.net hat eine Loesung, allerdings brauchst Du dafuer Apple's Developer Tools (aber wenn Du in C/C++ programmierst hast Du die ja wahrscheinlich eh): http://bbs.applescript.net/viewtopic.php?id=15393

    Du muesstest dann in Deinem "repeat loop"
    a) das alias this_item in einem Unix-Pfad konvertieren
    Code:
    set this_item to POSIX path of this_item
    b) ein Shell-Script einbauen, dass diesen Pfad benutzt und das Erstellungsdatum aendert
    Code:
    do shell script "/Developer/Tools/SetFile -d 02/04/2006 " & this_item
    Evtl. moechtest Du vorher (current date) in das richtige Format fuer das Shell-Script uebersetzen, das ist recht einfach mit Apple Script's date & time commands, die ich jetzt aber nicht zur Hand habe.

    Good scripting
    Farid
     
  6. LaForce

    LaForce MacUser Mitglied

    Beiträge:
    809
    Zustimmungen:
    3
    MacUser seit:
    17.04.2004
    oder so...

    tell application "Finder"

    set sel to every item of folder of the front window

    repeat with f in sel

    try
    set modification date of f to (current date)
    on error errMsg number errNum from errFrom partial result errResult to errTo
    display dialog ("Ooops: " & return & errMsg & "=> " & errNum)
    end try

    end repeat

    end tell
     
  7. willfried

    willfried Thread Starter MacUser Mitglied

    Beiträge:
    136
    Zustimmungen:
    0
    MacUser seit:
    30.01.2005
    Ich habe bei macscripter.net (Danke, Farid) das Tool Miana gefunden. Damit verändert man das Creation Date sehr einfach. Allerdings habe ich immer noch nicht den gewünschten Effekt erzielt. :(

    Ich muss an das Erstellungsdatum im .jpg File heran und es ändern. Hintergrund: Ich habe eine Menge Urlaubsfotos bei der Entwicklung vom Negativfilm auch auf CD brennen lassen. Jedes Foto hat dann als Erstellungsdatum den Moment, in dem es von der Maschine erstellt wurde.
    Da es sich um mehrere Filme handelt, die in beliebiger Reihenfolge von der Maschine bearbeitet worden sind, kommt es vor, dass der Zeitstempel von den Bildern des Films2 zeitlich vor den Bildern von Film1 liegt. Fügt man nun in iPhoto alle Bilder in einen Film ein, dann sind die Bilder nicht in der richtigen Reihenfolge. Ich musste also als Zwischenlösung für jeden Film einen eigenen Film in iPhoto anlegen, damit zumindest auf diesem Weg die Reihenfolge stimmt. Aus Übersichtsgründen möchte ich aber alle Fotos in einem iPhoto Film ablegen.

    Aus Sicherheitsgründen möchte ich nun nicht mit Skripten in iPhoto direkt arbeiten. Auch dort ist das Datum eines Fotos (date) nur r/o.

    Der sichere Weg: Bilder exportieren, mit Skript bearbeiten und dann in iPhoto importieren. Wenn ihr also einen Tip habt, wie ich das Erstellungsdatum und Uhrzeit in einem .jpg File ändern kann, dann hilft mir das sehr.
     
  8. chebfarid

    chebfarid MacUser Mitglied

    Beiträge:
    894
    Zustimmungen:
    75
    MacUser seit:
    05.10.2005
    Ciao Willfried,
    wenn ich Dein Problem richtig verstanden habe, mußt Du an die EXIF-Daten heran, die als Metadaten in den Fotos abgespeichert sind.
    Ohne Spezialsoftware zu bemühen kannst Du das mit "Image Events" bewerkstelligen (die "Image Events" sind eine Art OS X interner Foto-Editor, ohne eigenes Interface, d.h. fast nur über AppleScript steuerbar).

    Im folgenden Beispiel, das am besten als "Application" abgespeichert wird, mußt Du die Imagefiles auf das Icon der Anwendung ziehen, dann wird das EXIF-Erstellungsdatum eingelesen, umformatiert und vom Finder als Modification Date des jeweiligen Files gespeichert, so daß Du wenn Du nach Bearbeitungsdatum sortierst die korrekte Reihenfolge haben solltest.
    Alles ohne Gewähr, also besser erstmal mit einer Kopie der Fotos ausprobieren ;)

    Code:
    property myDate : (current date) -- globale Variabile dient als Base dür die Datumsmanipulationen
    
    on open myFiles
    	repeat with f in myFiles
    		
    		set oldTID to text item delimiters -- siehe letzte Zeile
    		set text item delimiters to " " -- text item delimiters werden verändert, um die Exif-Informationen zu filtern
    		
    		tell application "Finder"
    			set f to f as alias
    		end tell
    		
    		tell application "Image Events"
    			set myImage to open f
    			set m to metadata tags of myImage
    			repeat with tag in m
    				if name of tag = "creation" then
    					set tagValue to value of tag
    					exit repeat
    				else
    					-- Im Fall nicht korrekter EXIF-Informationen:
    					set tagValue to "1904:12:31 00:00:00"
    				end if
    			end repeat
    			close myImage
    		end tell
    		
    		set dateTime to text items of tagValue -- z.B.: {"2005:12:09", "16:00:00"}
    		set exifDate to item 1 of dateTime -- z.B.: "2005:12:09"
    		set exifTime to item 2 of dateTime -- z.B.: "16:00:00"
    		
    		set text item delimiters to ":" -- text item delimiters werden verändert, um Datum und Uhrzeit zu filtern
    		
    		set exifDate to text items of exifDate -- z.B.: {"2005", "12", "09"}
    		set exifTime to text items of exifTime -- z.B.: {"16", "00", "00"}
    		-- Die einzelnen Elemente werden zu einem Finder-tauglichen Datum zusammengefügt:
    		set year of myDate to item 1 of exifDate
    		set month of myDate to item 2 of exifDate
    		set day of myDate to item 3 of exifDate
    		set time of myDate to 0
    		set t to ((item 1 of exifTime) * 3600) + (item 2 of exifTime) * 60 + (item 3 of exifTime)
    		
    		set myDate to (myDate + t)
    		
    		tell application "Finder"
    			set modification date of f to myDate
    		end tell
    		
    		set text item delimiters to oldTID -- die text item delimiters werden in den Anfangszustand zurückversetzt
    		
    	end repeat
    end open
    Good scripting
    Farid
     
  9. upunkt

    upunkt MacUser Mitglied

    Beiträge:
    12
    Zustimmungen:
    0
    MacUser seit:
    05.06.2005
    hey!
    check mal diese kleine freeware, damit kann man batchmäßig änderungsdaten mit erstellungsdaten gleichsetzen.

    http://software.u-labor.de/BIMPDELFER/Bimpdelfer.sitx

    grüße
    upunkt
     
  10. willfried

    willfried Thread Starter MacUser Mitglied

    Beiträge:
    136
    Zustimmungen:
    0
    MacUser seit:
    30.01.2005
    Danke für den Hinweis. Ich habe in der Zwischenzeit ein einfaches Hilfsmittel in iPhoto gefunden: unter Fotos > Stapel ändern ... kann man das Datum und die Uhrzeit für die markierten Bilder nach eigenen Wünschen ändern.
    Warum kompliziert, wenn es auch einfach geht :rolleyes:
     
Die Seite wird geladen...

Diese Seite empfehlen