• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung

Datum im Dateinamen speichern mit AppleScript

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Hallo Scripter!

Man hat mich ins falsche Forum verschoben, daher frage ich hier mal an und zwar:

Wie kann ich das Jahresdatum im Dateinamen speichern?

Beispiel: DateinameDatum.xy

MacPlaner2012.xy

Gibt es einen passenden Scriptbefehl oder muss ich das anders machen?

Bin Newbie in Sachen Script…

Thx
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hi,

da kannst Du jetzt mind. 1000 versch. Antworten bekommen ... ;)

Im ScriptEditor öffnen und als Programm sichern.

Funktioniert als Droplet -> also Dateien draufDroppen ...



Code:
on open dropped
    set theYear to year of (current date)
    
    repeat with i from 1 to count of dropped
        set theItem to (item i of dropped) as text
        set TID to AppleScript's text item delimiters
        set AppleScript's text item delimiters to {":"}
        set fileName to text item -1 of theItem
        set filePath to ((text items 1 thru -2 of theItem) as text) & ":"
        if fileName contains "." then
            set AppleScript's text item delimiters to {"."}
            set newFileName to text 1 thru text item -2 of fileName & theYear & "." & text item -1 of fileName
        else
            set newFileName to fileName & theYear
        end if
        set AppleScript's text item delimiters to {TID}
        set newPosixFile to quoted form of POSIX path of (filePath & newFileName)
        do shell script "mv -f " & quoted form of POSIX path of theItem & space & newPosixFile
    end repeat
end open
 
Zuletzt bearbeitet:

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Oh, das ist aber nett von Dir. Ich probiere das morgen direkt aus :)

Freue mich riesig.

Aber da fällt mir was auf: das will ich in Filemaker anwenden und wenn das als Droplet ausgelegt ist, dann funktioniert das doch nicht, oder?

Hm, egal... werde ich morgen sehen ;)
 

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Hallo Hans!

Was muss ich jetzt machen, damit das funktioniert?

Ich habe es abgetippert und auf Ausführen geklickt, aber da passiert nichts :(
 

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Sorry, habe ich gemacht, aber geht trotzdem nicht. Wenn ich eine Datei z.B. ein kleines Gif darüber ziehe, dann passiert leider nichts. Ich habe beim speichern des Scripts als Programm speichern angeklickt… komisch:(
 
Zuletzt bearbeitet:

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Hallo Hans!

Sorry, ich habe das falsch gelesen! Ich habe die Option 'nur ausführbar' mit Dateiformat verwechselt… funktioniert tadellos… vielen, vielen Dank :)

Wenn ich (current date) ​alleine nehme, ist das der Datumsbefehl?
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Guten Morgen,

current date = date "Sonntag, 22. Juli 2012 07:35:57"

Schau Dir vllt. im AppleScript-Editor das Funktionsverzeichnis der Standard-Additions an.

Schönen Tag :)

Hans
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Das ganze geht auch noch ein wenig kürzer:

Code:
[size=2][b]on[/b] [color=#0000FF][b]open[/b][/color] [color=#3F7F00]theseFiles[/color]
	[b]repeat[/b] [b]with[/b] [color=#3F7F00]anFile[/color] [b]in[/b] [color=#3F7F00]theseFiles[/color]
		[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
			[b]if[/b] [color=#6C04D4]name extension[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]is[/b] "" [b]then[/b]
				[color=#4C4D4D]--Für Ordner:[/color]
				[b]set[/b] [color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]to[/b] [color=#0000FF][i]characters[/i][/color] 1 [b]thru[/b] -(([color=#0000FF][b]count[/b][/color] [b]of[/b] [color=#0000FF][i]items[/i][/color] [b]of[/b] ([color=#6C04D4]name extension[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])) + 1) [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color]) & [color=#6C04D4]year[/color] [b]of[/b] ([color=#0016B0][b]current date[/b][/color]) [b]as[/b] [color=#0000FF][i]string[/i][/color]
			[b]else[/b]
				[color=#4C4D4D]--Für Dateien:[/color]
				[b]set[/b] [color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]to[/b] [color=#0000FF][i]characters[/i][/color] 1 [b]thru[/b] -(([color=#0000FF][b]count[/b][/color] [b]of[/b] [color=#0000FF][i]items[/i][/color] [b]of[/b] ([color=#6C04D4]name extension[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])) + 2) [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color]) & [color=#6C04D4]year[/color] [b]of[/b] ([color=#0016B0][b]current date[/b][/color]) & "." & [color=#6C04D4]name extension[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color]
			[b]end[/b] [b]if[/b]
		[b]end[/b] [b]tell[/b]
	[b]end[/b] [b]repeat[/b]
[b]end[/b] [color=#0000FF][b]open[/b][/color]
[/size]
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo Pill,

Laufzeit oder Code¿ Werfe mal jeweils 1000 Dateien ins Rennen ....
 

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Hallo Zusammen,

ich habe das "Kurzscript" current date gesucht. Allerdings soll das ja nicht zum droppen sein, sondern im Hintergrund lediglich die Kopie einer Datenbank mit dem Jahresdatum ergänzen.

FileMaker kopiert automatisch die leere Datenbank, dann soll der Name xyKopie.fmp12 in xy2012.fmp12 umbenannt werden (xy2013.fmp12,...)...

Ich habe noch keine elegantere Lösung gefunden, um den Datensatzzähler jeweils am Jahresanfang zurückzusetzen. FileMaker zählt automatisch weiter und das soll er eben nicht bzw. nur bis zum neuen Jahr. Der Zähler steht auch für ein Aktenzeichen im laufenden Jahr (hab ich mir schon zusammengebastelt), daher ist ein Zurücksetzen der laufenden Datensätze im neuen Jahr eben wichtig.

Ich probiere das Script von Dir Pill auch mal aus... Danke :)

Die Geschichte hat dazu geführt, dass ich ab September einen FM-Lehrgang mache ;) ... mal sehen ob ich die Zertifizierung hinbekomme... freu mich schon...

achja, bei FM heißt die Funktion hole(systemdatum) :D

LG :)
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Laufzeit oder Code¿ Werfe mal jeweils 1000 Dateien ins Rennen ....

Dass die Shell immer schneller ist, als der Finder ist mir klar. Mir gings eher um den Part zum Herausfinden der Endung und des Dateinamens. Das ließe sich übrigens auch in der Shell machen, dann geht's noch schneller:

Code:
[size=2][b]on[/b] [color=#0000FF][b]open[/b][/color] [color=#3F7F00]theseFiles[/color]
	[b]repeat[/b] [b]with[/b] [color=#3F7F00]anFile[/color] [b]in[/b] [color=#3F7F00]theseFiles[/color]
		[color=#0016B0][b]do shell script[/b][/color] "FILE=\"" & [color=#6C04D4]POSIX path[/color] [b]of[/b] [color=#3F7F00]anFile[/color] & "\";mv \"$FILE\" \"$(echo \"$FILE\" | sed \"s#\\(.*\\)\\([.|/]\\)#\\1\"$(date +%Y)\"\\2#\")\""
	[b]end[/b] [b]repeat[/b]
[b]end[/b] [color=#0000FF][b]open[/b][/color][/size]

;)
 

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Wie war das noch gleich? Wenn zwei sich "streiten" freut sich der MacPlaner :)

Vielen Dank Euch beiden.

Ich bin aufmerksam an Eurer Seite :)

Ob über Shell oder Finder; beides kann ich nehmen, da Scripts im Allgemeinen ja ausgeführt werden können ;)
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo Pill,

so grob in Sachen Geschwindigkeit bei 1000 Dateien: 1.) 5 Sek., 2.) 8 Sek. 3.) 10 Sek. ;)

Der Finder schneller als von mir erwartet, Shell vllt. mit einfacherer Befehlskette schneller¿ (basename ...), die guten alten text item delimiters ...



Schönen Abend

Hans-Gerd Claßen
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Nochmal ich ;),

mit dem "ASObjC Runner" von Shane Stanley gibt ja auch noch ein tolles tool: 6 Sek. für 1000 renames ... (wenn bereits gestartet ...)

Code:
on open dropped
    set theYear to (year of (current date)) as text
        repeat with i from 1 to count of dropped
        set aPath to alias (item i of dropped)
                tell application "ASObjC Runner"
            set {suffix, baseName} to {name extension, name stub} of (parsed path aPath)
            set newName to link strings {baseName, theYear, ".", suffix} by inserting ""
            modify file aPath setting name newName
        end tell
            end repeat
end open
 

MacPlaner

Schöner von Nordhausen
Registriert
05.02.11
Beiträge
326
Ich warte auf die Veröffentlichung von dem All in One Dummies Buch von Holcomb; dann mach ich fleißig mit :)

Bisher habe ich nur das E-Book von Altenburg für Script…
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Dass die Shell immer schneller ist, als der Finder ist mir klar. Mir gings eher um den Part zum Herausfinden der Endung und des Dateinamens. Das ließe sich übrigens auch in der Shell machen, dann geht's noch schneller:

...

;)

Ich toppe dich! ;)

Meins:
Code:
[B]property[/B] addToName : "-" & year [B]of[/B] ([B]current date[/B])

[B]on[/B] [B]run[/B]
    [B]tell[/B] [I]application[/I] "Finder" [B]to[/B] [B]set[/B] theTestFiles [B]to[/B] [I]files[/I] [B]of[/B] [I]folder[/I] ([I]POSIX file[/I] "/Users/fyysh/TMP/rentest") [B]as[/B] [I]alias list[/I]
    doStuff(theTestFiles)
[B]end[/B] [B]run[/B]

[B]on[/B] [B]open[/B] thaDroppedStuff
    doStuff(thaDroppedStuff)
[B]end[/B] [B]open[/B]

[B]on[/B] doStuff(aliasList)
    [B]set[/B] shellScript [B]to[/B] ""
    [B]repeat[/B] [B]with[/B] aAlias [B]in[/B] aliasList
        [B]set[/B] shellScript [B]to[/B] shellScript & getShCode(aAlias, [B]my[/B] addToName)
    [B]end[/B] [B]repeat[/B]
    [B]with[/B] [B]timeout[/B] [B]of[/B] 560 [I]seconds[/I]
        [B]do shell script[/B] shellScript
    [B]end[/B] [B]timeout[/B]
[B]end[/B] doStuff

[B]on[/B] getShCode(fileAlias, theYear)
    [B]set[/B] filePosix [B]to[/B] quoted form [B]of[/B] (POSIX path [B]of[/B] fileAlias)
    [B]set[/B] shCode [B]to[/B] "¬
FILE_NAME=\"$(basename " & filePosix & ")\"
FILE_PATH=\"$(dirname " & filePosix & ")\"
mv " & filePosix & " \"${FILE_PATH}/${FILE_NAME%.*}" & theYear & ".${FILE_NAME##*.}\"
"
    [B]return[/B] shCode
[B]end[/B] getShCode

Deins:
Code:
[B]on[/B] [B]run[/B]
    [B]tell[/B] [I]application[/I] "Finder" [B]to[/B] [B]set[/B] theTestFiles [B]to[/B] [I]files[/I] [B]of[/B] [I]folder[/I] ([I]POSIX file[/I] "/Users/fyysh/TMP/rentest") [B]as[/B] [I]alias list[/I]
    doStuff(theTestFiles)
[B]end[/B] [B]run[/B]


[B]on[/B] doStuff(aliasList)
    [B]repeat[/B] [B]with[/B] anFile [B]in[/B] aliasList
        [B]with[/B] [B]timeout[/B] [B]of[/B] 560 [I]seconds[/I]
            [B]do shell script[/B] "FILE=\"" & POSIX path [B]of[/B] anFile & "\";mv \"$FILE\" \"$(echo \"$FILE\" | sed \"s#\\(.*\\)\\([.|/]\\)#\\1\"$(date +%Y)\"\\2#\")\""
        [B]end[/B] [B]timeout[/B]
    [B]end[/B] [B]repeat[/B]
[B]end[/B] doStuff

Code:
fyysh@perseus: ~
mkdir TMP/rentest && cd TMP/rentest

fyysh@perseus: ~/TMP/rentest
$> for ((i=0;i<500;i++)); do touch test$i.txt; done;for ((i=0;i<500;i++)); do touch test$i.blabla.bla.txt; done

fyysh@perseus: ~/TMP/rentest
$> time osascript -e 'tell app "applescript runner" to do script "Perseus-SSD:Users:fyysh:TMP:meins.scpt"'
real    0m50.937s
user    0m0.078s
sys    0m0.034s

fyysh@perseus: ~/TMP/rentest
$> rm *; for ((i=0;i<500;i++)); do touch test$i.txt; done;for ((i=0;i<500;i++)); do touch test$i.blabla.bla.txt; done

fyysh@perseus: ~/TMP/rentest
$> time osascript -e 'tell app "applescript runner" to do script "Perseus-SSD:Users:fyysh:TMP:seins.scpt"'
real    1m4.729s
user    0m0.080s
sys    0m0.037s



Meins ist 14s schneller! :p
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo fyysh,

1000 Dateien macht Dein Script (bei mir zumindest ... ) nicht. Da wird der zusammengesetzte String wohl zu lang¿
Ich möchte aber sowieso wetten, dass das erste gepostete Script noch das schnellste ist :)

Tschüss

Hans
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Noch schneller:

Code:
[COLOR=#319608][COLOR=#000000][B]on[/B] [/COLOR][COLOR=#2800ff][B]open [/B][/COLOR]theseFiles
[/COLOR]    [B]set[/B] [COLOR=#319608]thisYear[/COLOR] [B]to[/B] [COLOR=#1600c0][B]do shell script[/B][/COLOR] "date +%Y"
    [B]set[/B] [COLOR=#319608]theString[/COLOR] [B]to[/B] ""
    [B]repeat[/B] [B]with[/B] [COLOR=#319608]anFile[/COLOR] [B]in[/B] [COLOR=#319608]theseFiles[/COLOR]
        [B]set[/B] [COLOR=#319608]theString[/COLOR] [B]to[/B] [COLOR=#319608]theString[/COLOR] & [COLOR=#8f00dc]quoted form[/COLOR] [B]of[/B] [COLOR=#8f00dc]POSIX path[/COLOR] [B]of[/B] [COLOR=#319608]anFile[/COLOR] & " "
    [B]end[/B] [B]repeat[/B]
    [COLOR=#1600c0][B]do shell script[/B][/COLOR] "for i in " & [COLOR=#319608]theString[/COLOR] & "; do mv \"$i\" \"${i%.*}" & [COLOR=#319608]thisYear[/COLOR] & ".${i##*.}\"; done"
[B]end[/B] [COLOR=#2800ff][B]open[/B][/COLOR]
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!

Ja. 1000 Antworten sind bei diesem Thema durchaus möglich :•)
Noch ein Skript von mir wäre Quatsch - zumal die hier geposteten ja wirklich nicht zu toppen wären ... vor allem nicht von mir
linie15x18.gif


Aber - hüstlel- nur der Vollständigkeit halber hier noch eine Möglichkeit:
Der Automator. Keine Skriptkenntnisse nötig und ... ziemlich schnell
szopf27x18.gif



Automator.jpg

Gruß