Komprimierten File entpacken und Bezug zum entpackten Folder herstellen

T

toggy

Neues Mitglied
Thread Starter
Dabei seit
17.03.2013
Beiträge
16
Reaktionspunkte
0
Hallo Community!

Ich beginne gerade erst mit AS und hänge jetzt seit "geraumer Zeit" fest.

Also, ich erhalte eine z.B. gezippte Datei, diese soll entzippt werden, und die Dateien aus dem Ordner sollen kopiert werden. Mein Problem ist, dass die dekomprimierte Datei ja jetzt ein Ordner ist, zu welchem ich keinen Bezug herstellen kann. Folgendes habe ich zusammengebastelt:

Code:
​[COLOR=#000000][FONT=arial]set CompressFile to (choose file with prompt "Datei auswählen")[/FONT][/COLOR]
[COLOR=#000000][COLOR=#000000][FONT=arial]tell application "Finder"[/FONT][/COLOR][/COLOR]
[COLOR=#000000][COLOR=#000000][FONT=arial]   open file CompressFile[/FONT][/COLOR][/COLOR]
[COLOR=#000000][COLOR=#000000][FONT=arial]   set FolderName to name of CompressFile[/FONT][/COLOR][/COLOR]
[COLOR=#000000][COLOR=#000000][FONT=arial]   set FolderName to text items 1 thru -((count (name extension of CompressFile as string)) + 2) of (name of CompressFile as string) as string
[/FONT][/COLOR][/COLOR]
[COLOR=#000000][COLOR=#000000][FONT=arial]-- get the name of folder FolderName
[/FONT][/COLOR][/COLOR][COLOR=#000000][COLOR=#000000][FONT=arial]-- open folder FolderName[/FONT][/COLOR][/COLOR]
[COLOR=#000000][COLOR=#000000][FONT=arial]end tell
[/FONT][/COLOR][/COLOR]

Wie komme ich jetzt mit der "String-Variable" zur "Ordner-Variable" ???

Viele Grüsse,
toggy

10.6 und 10.8
 
Ich würde das anders angehen. Du kannst im Terminal mit unzip eine Zip-Datei entpacken. Mit der -d Option kannst du ein Verzeichnis angeben, in das entpackt werden soll:

Code:
[B]set [/B][COLOR=#4F8F00][FONT=Verdana]CompressFile [/FONT][/COLOR][B]to[/B][FONT=Verdana] ([/FONT][COLOR=#012FBE][FONT=Verdana][B]choose file [/B][/FONT][/COLOR][COLOR=#012FBE][FONT=Verdana]with prompt[/FONT][/COLOR][FONT=Verdana] "Datei auswählen")[/FONT][FONT=Verdana]
[/FONT]
[COLOR=#012FBE][FONT=Verdana][B]do shell script[/B][/FONT][/COLOR][FONT=Verdana] "unzip " & [/FONT][COLOR=#812FDC][FONT=Verdana]quoted form [/FONT][/COLOR][B]of [/B][COLOR=#812FDC][FONT=Verdana]POSIX path [/FONT][/COLOR][B]of [/B][COLOR=#4F8F00][FONT=Verdana]CompressFile[/FONT][/COLOR][FONT=Verdana] & " -d ~/Desktop/test/"[/FONT]
 
Hallo Pill,

erst mal danke für deine super fixe Antwort!!!

Das "dekomprimieren-Script" wird einem Script vorangesetzt, welches ein Verzeichnis anlegt, das seinen Namen aus dem Ordnernamen generiert. Deshalb kann ich selbst kein Verzeichnis angeben.
Mein Problem ist, dass ich nicht diese Kurve vom String zum Folder kriege.
Gibt es da noch einen anderen Ansatz?

Viele Grüsse,
toggy
 
Mit

set FolderName to text items 1 thru -((count (name extension of CompressFile as string)) + 2) of (name of CompressFile as string) as string

bekommst du ja bereits den Namen des Ordners. Du brauchst aber den Pfad zum Ordner, um den string in einen alias/folder umwandeln zu können. Das geht z.B. so:

set FolderName to folder (text items 1 thru -((count (name extension of CompressFile as string)) + 2) of (CompressFile as string) as string)

Die Zeile

set FolderName to name of CompressFile

kannst du dir übrigens sparen.
 
... ja genau ich habe den Namen.

Lasse ich das Script so laufen

Code:
set CompressFile to (choose file with prompt "Datei auswählen")
tell application "Finder"
    open file CompressFile
    -- set FolderName to name of CompressFile
     set FolderName to folder (text items 1 thru -((count (name extension  of CompressFile as string)) + 2) of (CompressFile as string) as string)
    open folder FolderName
end tell

erhalte ich folgende Fehlermeldung:

error "„Finder“ hat einen Fehler erhalten: „folder \"Macintosh HD:Users:macintosh10esktop:Testordner\"“ kann nicht gelesen werden." number -1728 from folder "Macintosh HD:Users:macintosh10esktop:Testordner"

Wie komme ich an den Ordner ran?

Danke und viele Grüsse
toggy
 
Zuletzt bearbeitet:
Existiert der Ordner denn zu diesem Zeitpunkt schon? Bei mir funktioniert es so:

Code:
[B]set [/B][COLOR=#4F8F00][FONT=Verdana]CompressFile [/FONT][/COLOR][B]to[/B][FONT=Verdana] ([/FONT][COLOR=#012FBE][FONT=Verdana][B]choose file [/B][/FONT][/COLOR][COLOR=#012FBE][FONT=Verdana]with prompt[/FONT][/COLOR][FONT=Verdana] "Datei auswählen")
[/FONT][FONT=Verdana][B]tell[/B] [COLOR=#0433ff][I]application[/I][/COLOR] "Finder"[/FONT]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000]    [/COLOR][COLOR=#0433ff][B]open [/B][/COLOR][COLOR=#0433ff][I]file [/I][/COLOR]CompressFile[/FONT][/COLOR]
[FONT=Verdana]    [B]set[/B] [COLOR=#4f8f00]FolderName[/COLOR] [B]to[/B] [COLOR=#0433ff][I]folder[/I][/COLOR] ([COLOR=#0433ff][I]text items[/I][/COLOR] 1 [B]thru[/B] -(([COLOR=#0433ff][B]count[/B][/COLOR] ([COLOR=#812fdc]name extension[/COLOR] [B]of[/B] [COLOR=#4f8f00]CompressFile[/COLOR] [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR])) + 2) [B]of[/B] ([COLOR=#4f8f00]CompressFile[/COLOR] [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR]) [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR])[/FONT]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000]    [/COLOR][COLOR=#0433ff][B]open [/B][/COLOR]FolderName[/FONT][/COLOR]
[B]end[/B][B]tell[/B]
 
...hm,
also dein Code hat jetzt gerade funktioniert, aber nur einmal! (ich schwöre es, ich habe mit eigenen Augen gesehen wie sich der Ordner öffnete) Danach aber nicht mehr, im Antworten-Protokoll steht:

tell application "AppleScript Editor"
choose filewith prompt "Datei auswählen"
--> alias "Macintosh HD:Users:aldesktop:test.zip"
end tell
tell application "Finder"
open file (alias "Macintosh HD:Users:aldesktop:test.zip")
get name extension of alias "Macintosh HD:Users:aldesktop:test.zip"
--> "zip"
get folder "Macintosh HD:Users:aldesktop:test"
--> error number -1728 from folder "Macintosh HD:Users:aldesktop:test"
Ergebnis:
error "„Finder“ hat einen Fehler erhalten: „folder \"Macintosh HD:Users:aldesktop:test\"“ kann nicht gelesen werden." number -1728 from folder "Macintosh HD:Users:aldesktop:test"

Ich bin ratlos.
Fällt dir dazu noch was ein???

Viele Grüsse,
toggy




 
Ich vermute, dass die Datei noch nicht entpackt ist, wenn du auf den Ordner zugreifen willst. Bau mal nach open file ein kurzes delay ein, dann sollte es gehen.
 
Hallo Pill,

danke für deine Antwort.
Ich glaube so langsam leide ich an Halluzinationen. Auch mit Pausen tut sich nix.

Nochmal genau betrachtet.
Mit
Code:
set FolderName to text items 1 thru -((count (name extension of CompressFile as string)) + 2) of (name of CompressFile as string) as string
erhalte ich den Namen (Ergebnis:"test"),
mit
Code:
set FolderName to folder (text items 1 thru -((count (name extension of CompressFile as string)) + 2) of (CompressFile as string) as string)
erhalte ich die Fehlermeldung, weil der Folder nicht gelesen werden kann (get folder "Macintosh HD:Users:aldesktop:test"
--> error number -1728 from folder "Macintosh HD:Users:aldesktop:test").
Ist es denn dann schon ein Folder?

Und gibt es noch einen anderen Weg aus dem Namen einen Ordner zu machen?

Viele Grüsse,
toggy
 
Das liegt nicht an der Umwandlung von String zu Folder, sondern daran, dass er am besagten Pfad den Ordner nicht findet (Fehler -1728). Das folgende Skript wartet so lange, bis ein Ordner mit richtigem Namen existiert:

Code:
[B]set [/B][COLOR=#4F8F00][FONT=Verdana]CompressFile [/FONT][/COLOR][B]to[/B][FONT=Verdana] ([/FONT][COLOR=#012FBE][FONT=Verdana][B]choose file [/B][/FONT][/COLOR][COLOR=#012FBE][FONT=Verdana]with prompt[/FONT][/COLOR][FONT=Verdana] "Datei auswählen")
[/FONT][FONT=Verdana][B]tell[/B] [COLOR=#0433ff][I]application[/I][/COLOR] "Finder"[/FONT]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000]    [/COLOR][COLOR=#0433ff][B]open [/B][/COLOR][COLOR=#0433ff][I]file [/I][/COLOR]CompressFile[/FONT][/COLOR]
[FONT=Verdana]    [B]set[/B] [COLOR=#4f8f00]FolderName[/COLOR] [B]to[/B] ([COLOR=#0433ff][I]text items[/I][/COLOR] 1 [B]thru[/B] -(([COLOR=#0433ff][B]count[/B][/COLOR] ([COLOR=#812fdc]name extension[/COLOR] [B]of[/B] [COLOR=#4f8f00]CompressFile[/COLOR] [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR])) + 2) [B]of[/B] ([COLOR=#4f8f00]CompressFile[/COLOR] [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR]) [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR])[/FONT]
[FONT=Verdana]    [B]repeat[/B] [B]until[/B] [COLOR=#0433ff][B]exists[/B][/COLOR] [COLOR=#0433ff][I]folder[/I][/COLOR] [COLOR=#4f8f00]FolderName[/COLOR][/FONT]
[FONT=Verdana]        [COLOR=#012fbe][B]delay[/B][/COLOR] 0.1[/FONT]
[FONT=Verdana]    [B]end[/B] [B]repeat[/B][/FONT]
[COLOR=#0433FF][FONT=Verdana][COLOR=#000000]    [/COLOR][B]open [/B][I]folder [/I][COLOR=#4f8f00]FolderName[/COLOR][/FONT][/COLOR]
[B]end [/B][B]tell[/B]
 
  • Gefällt mir
Reaktionen: toggy
...yep!

Vielen Dank!!!

Und viele Grüsse,
toggy
 
Ich würde es mit unzip/Archive Utility.app machen (wie Post #2, ohne -d Pfad), weil "open file ..." halt non-blocking ist.
Wenn in obiger Lösung das CompressFile beispielsweise umbenannt worden ist, loopt das script ewig.
 
Hallo olivetti,

Danke fürs mitdenken!
(Erst) heute konnte ich das mal testen.

MIt "Post #2, ohne -d Pfad" funktioniert es eigentlich fehlerfrei, wenn die Dateien im entpackten Ordner ein Suffix haben.
Wenn nicht (das ist öfters der Fall), habe ich wieder ein existentielles Problem denn die Files werden vom nachfolgenden Progamm-Script nicht erkannt weil die Datei-Art jetzt eine "Ausführbare Unix-Datei" ist.

Mit der "open file ..." Lösung behalten die Dateien zwar ihre "Ursprungsart" aber das nachfolgende Script bricht ab, weil es eine "info for file", welches sich in dem entpackten Ordner befindet nicht erhält...?
Und es kann vorkommen, dass mal ein File umbenannt wurde und das Script dann ewig läuft.


...da bin ich wieder am Anfang.
Kann man das Terminal irgendwie dazu bringen die File-Art zu erkennen bzw. nicht zu ändern?

Viele Grüsse
toggy
 
Du musst bei umbenannten Dateien eh' prüfen.
Evtl. wäre Pills #2 -d mit definiertem Extract-Ordner, und noch anschliessendem parsen, doch der bessere Weg.

Im Terminal kann man prüfen:
file CompressFile
unzip -t CompressFile

und die Ordnernamen kriege ich damit

zipinfo -1 CompressFile | grep '\/$'

Was machst du, wenn in einem Zip (ich gehe jetzt einfach mal von zip aus) mehrere Ordner enhalten sind?
Vielleicht kannst du ja den gesamten Workflow hier posten und mitteilen wie die CompressFiles aufgebaut sind.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: toggy
...sorry, kann momentan nichts testen. Sobald ich wieder Zugriff auf alles habe, gibt es sofort Feedback.

Viele Grüsse
toggy
 
...also, nur für die Dateien mit Suffix verwende ich jetzt die #2 -d Lösung, die konnte ich problemlos meinem bestehenden Script voranstellen. (kanns leider nicht posten)
Bei denen "mit ohne" funktionierte es über #10 open file, allerdings mit delay 10 (!) - ist deshalb erst mal verworfen.


Viele Grüsse,
toggy
 
Zurück
Oben Unten