Syntaxfehler beim (alten?) Befehl zum Öffnen des Ordners

373
Isaac Rabinovitch

Ich arbeite mich durch AppleScript 1-2-3 (2009) und kann dieses Beispiel nicht ausführen:

tell application "Finder"  close every window open home set toolbar visible of the front Finder window to true set the sidebar width of the front Finder window to 135 set the current view of the front Finder window to column view set the bounds of the front Finder window to  set folder "Documents" of home set toolbar visible of the front Finder window to false set the current view of the front Finder window to flow view set the bounds of front Finder window to  select the last finder window end tell 

Der Parser würgt den set folderBefehl und sagt: "Ein Ende der Zeile kann diese Eigenschaft nicht verfolgen." Wenn ich nicht alles vermasselt habe (völlig möglich) oder das Buch einfach falsch ist, muss sich die Sprache seit 2009 geändert haben. Wenn ja, wie?

Update: Die Antworten und Kommentare (lesenswert!) Überzeugen mich davon, dass die Bücher einfach falsch sind.

-2
Der Hauptgrund für den `set-Ordner" Documents "von zu Hause` Codezeile, von Ihrer Frage aus, ist fehlerhaft, weil er nicht syntaktisch korrekt ist! Schauen Sie sich die [`set`] (https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216 an -SW52) _command_ im AppleScript Language Guide für seine Syntax und Beispiele! user3439894 vor 6 Jahren 0
Ich bin sicher, dass Sie recht haben, aber mir zu sagen, ich solle nachsehen, und der Sprachführer ist nicht hilfreich. Ich habe Applescript seit ungefähr 15 Minuten studiert. in meinem jetzigen Zustand der Unwissenheit auf den Sprachführer zu verweisen, wäre so etwas wie ein verwirrter ESL-Student, der durch die Oxford English Grammar blättert! Es ist schade, dass ein "Apple-zertifiziertes" Buch einen solchen grundlegenden Fehler enthält. Und auf den ersten 39 Seiten! Isaac Rabinovitch vor 6 Jahren 0
Oh, FFS. Ich kann akzeptieren, dass manche Leute denken, dass dies eine schlechte Frage ist. Aber abzustimmen, ohne zu erklären, warum das so ist, ist einfach kindisch. Isaac Rabinovitch vor 6 Jahren 0
Als Antwort auf Ihren Kommentar, "mir zu sagen, ich solle schauen, und der Sprachführer ist nicht hilfreich", denke ich, dass der Rat, den @ user3439894 Sie in Richtung (schau und Sprachführer) gelenkt hat, "tot am" war. Ich spreche nur für mich selbst (aber ich bin mir sicher, dass andere damit einverstanden wären). Das Erlernen von AppleScript war genau das. Lesen von Sprachanleitungen und Beispielen immer und immer wieder (auch wenn es so schien, als würde ich Japanisch lesen) wch1zpink vor 6 Jahren 1
Ich denke, dein Kommentar verfehlt den Punkt. Ich würde vielleicht Ihren Ratschlägen folgen (vor allem, wenn ich in dummere Fehler stoße), aber jetzt versuche ich, * dieses * Buch zu lesen. Ihr Rat lautet: "Werfen Sie das blöde Buch raus und lesen Sie einfach das Sprachhandbuch." Das kann ein guter Rat sein, hilft mir aber bei der anstehenden Aufgabe nicht. Isaac Rabinovitch vor 6 Jahren 0

2 Antworten auf die Frage

1
CJK

Um Ihre spezifische Frage zu beantworten, wie sich AppleScript seit 2009 verändert haben könnte, werde ich nicht die unzähligen Möglichkeiten erraten, die sich seitdem entwickelt haben könnten (und ich konnte keine Sprachdokumentation aus 2009 oder früher finden), aber ich kann das hervorheben Aktuelle Formulierung, wie sie zu Ihrem Code-Snippet gehört. Wo also Ihr Skript den Fehler wirft, mit dem Syntaxfehler in set folder "Documents" of home.

Der setBefehl wird in (der aktuellen Version von) AppleScript definiert:

[die] zuweisen [ment of] einen oder mehr Werte zu einem oder mehreren Variablen .

Es hat die folgende Syntax:

setze variablePattern auf Ausdruck

Dabei variablePatternist der Name einer Variablen oder Liste von Variablen und wird expressionzu den Werten berechnet, die den Variablen zugewiesen werden.

(Hinweis: Der AppleScript-Sprachführer besagt, dass die zweite Hälfte der Deklaration to %expression%optional ist. Ich kann mir jedoch keine Instanz vorstellen, für die dies zutrifft, und setmuss meines Erachtens immer der vollständigen Syntax folgen oben beschrieben. Vielleicht ist dies eine der Möglichkeiten, wie sich die Sprache verändert hat ...?)

Einfach ausgedrückt, setwird immer verwendet, um den Wert einer Sache zu übernehmen und einer anderen zuzuweisen, genau wie alle anderen Zeilen Ihres Code-Snippets.

In der folgenden Zeile:

 set folder "Documents" of home 

Wir haben nur eine halbe Deklaration: Der Befehl beginnt mit der Angabe eines Objekts (in diesem Fall eines Ordners), das einen neuen Wert annehmen soll, aber nicht angeben, wie der neue Wert aussehen soll.

Darüber hinaus kann das folderObjekt normalerweise keinen Werten selbst zugewiesen werden. Man kann nicht befehlen:

 set folder "Documents" of home to desktop 

Doch eines kann das zuweisen folderObjekt etwas anderes, wie eine Variable oder den Wert einer vorhandenen Eigenschaft, wie die targetEigenschaft ein Finder window:

 set the target of the front Finder window to folder "Documents" of home 

Der setBefehl weist das AppleScript an, den Wert des Ausdrucks zu verwenden folder "Document" of home(der als Standortreferenz auf der Festplatte ausgewertet wird) und dieser targetEigenschaft der Eigenschaft des zuzuweisen front Finder window(die steuert, welches Verzeichnis im Fenster angezeigt wird). Wie erwartet, wechselt das Verzeichnis des aktiven Finder- Fensters vom Ausgangsverzeichnis in das Verzeichnis Dokumente .

Dies scheint wie ein unwahrscheinlich gewünschtes Ergebnis, da all diese Maßnahmen zu einem einzigen Anwendung Finder - Fenster bedeutet, dass die vorhergehenden Zeilen etwas überflüssig sind: Es wäre nicht notwendig, die öffnen Start - Ordner und ihre Eigenschaften ( toolbar visible, sidebar width, current viewund bounds) nur dann um das Verzeichnis zu ändern und für alle diese Eigenschaften neue Werte festzulegen.

Ich denke, die wahrscheinlichste Lösung ist eine von @ wch1zpink angedeutete Antwort in seiner Antwort, die darin besteht, ein neues Finder- Fenster am Ort des Dokumentenordners zu öffnen .

Ich entschied mich dazu, dies auf die gleiche Weise zu tun wie das Skript mit dem Home- Ordner:

 open folder "Documents" of home 

was die Problemlinie komplett ersetzt. Das resultierende Skript hat also eine angenehme Symmetrie bei der Erstellung und Bearbeitung der beiden Fenster:

 tell application "Finder" activate close every window  open home set toolbar visible of the front Finder window to true set the sidebar width of the front Finder window to 135 set the current view of the front Finder window to column view set the bounds of the front Finder window to   open folder "Documents" of home set toolbar visible of the front Finder window to false set the current view of the front Finder window to flow view set the bounds of front Finder window to   select the last Finder window end tell 

Der openBefehl öffnet sich offensichtlich ein neues Finder - Fenster an der angegebenen Stelle, sondern macht auch das neue Finder - Fenster der Front Finder - Fenster .

Aus diesem Grund ist es einfacher zu sehen, dass der erste setAnweisungsblock für ein Finder- Fenster gilt. und der zweite Block ist für einen anderen.

Hoffentlich habe ich Ihre Anfrage direkt angesprochen und eine sinnvolle Erklärung gegeben. Verzeihen Sie, wenn etwas, was ich geschrieben habe, herablassend klingt: Ich habe versucht zu vermeiden, was Sie tun und wissen nichts über AppleScript, obwohl Beweise vorliegen, dass Sie eindeutig kein Neuling sind (2.5K-Reputation bei Super User). Wenn jedoch etwas von dem, was ich geschrieben habe, mehrdeutig oder schlecht erklärt ist, lassen Sie es mich wissen, und ich werde Ihnen gerne eine Klarstellung oder ein entsprechendes Wort geben.

Zu Ihrem "Hinweis: Der AppleScript-Sprachführer gibt an ...", ich gehe davon aus, dass _expression_ im Kontext optional ist, da er auch auf "" "" gesetzt werden kann, was Apple möglicherweise nicht als Ausdruck betrachtet, da "" " `ist wörtlich nichts, initialisiert aber die _variable_, die ihre Verwendung hat. Es ist entweder so etwas oder eine schlechte Dokumentation, die nur Apple ansprechen kann, wenn es sich um Letzteres handelt. user3439894 vor 6 Jahren 1
Danke, das beantwortet meine Frage genau. (Vielleicht detaillierter, als ich brauchte, aber daran kann nichts schaden.) Sie lassen mich vermuten, dass es sich nicht um eine Änderung der Sprache handelt, sondern um einen einfachen Fehler und das Fehlen des Beispiels, indem Sie es tatsächlich ausführen. Ich wundere mich irgendwie, wie gut das Buch ist. Isaac Rabinovitch vor 6 Jahren 0
-1
wch1zpink

Wenn Ihre Absicht mit dieser Codezeile ... set folder "Documents" of homeIst das aktuelle Sucherfenster hat, um die Ordner „Dokumente“ angezeigt wird, dann ersetzen Sie einfach diese Zeile set folder "Documents" of homemit diesem ...

set theFolder to folder "Documents" of home open theFolder 
Meine Absicht ist wie gesagt: Finden Sie heraus, warum ich einen Syntaxfehler erhalte. Isaac Rabinovitch vor 6 Jahren 0