Applescript: Prüfen, ob der Shell-Befehl fehlschlägt?

1972
Matthew Robertson

Ich schreibe ein AppleScript, um einen Ordner nach abgeschlossenen Downloads zu überwachen und dann zu verarbeiten. Wenn ich eine Datei herunterlade, die auf teilweise RARs aufgeteilt ist (.r01, .r02, ... Gott, ich hasse diese ), werden sie nach Abschluss des Vorgangs zufällig in den Completed-Ordner verschoben . Das Skript wird jedes Mal ausgelöst, wenn einer von ihnen abgeschlossen ist, aber ich möchte nicht, dass es automatisch aus dem Archiv entfernt wird, bevor alle abgeschlossen sind.

Also hier ist meine Lösung. Wenn ich im Skript ein Rar entdecke, vergewissere ich mich zunächst zur Vollständigkeit:

do shell script ("unrar v " & theItem) 

Die Hülle wird unter anderem Folgendes ausspucken:

… Testarchiv thefile.r19 96%… Testarchiv thefile.r20 99% ... Berechnung der Kontrollsummen aller Volumes. Volume thefile.r21 kann nicht gefunden werden. Thefile.avi - CRC fehlgeschlagen. Gesamtfehler: 1

Ich bin neu bei AppleScript. Was ist der effizienteste Weg, um dies zu überprüfen und festzustellen, ob die Überprüfung fehlgeschlagen ist?

(Alternativ unrar vist zeitaufwändig; gibt es eine bessere Möglichkeit, dieses Problem anzugehen?)

1

1 Antwort auf die Frage

1
Chealion

Wenn Sie Ihren Code ändern in:

 set output to do shell script ("unrar v " & theItem) 

Die Variablenausgabe enthält die Ausgabe des Shell-Skripts, mit dem Sie vergleichen können, was Sie für eine gültige Ausgabe erwarten.

if output contains "CRC Failed" then return end if 

Um zu vermeiden, dass das Programm ausgeführt werden muss, können unrar vSie die Dateierweiterung überprüfen (entweder bei der Einstellung theItemin AppleScript oder bei der Methode, die Sie zur Überwachung des Ordners verwenden) - wenn Sie den Startauftrag manuell erstellt und keine Ordneraktionen verwendet haben )

Weitere Informationen finden do shell scriptSie im technischen Hinweis 2065 von Apple .

Da eine komprimierte Datei aus einer beliebigen Anzahl von Teil-RARs bestehen kann, können Sie die Dateierweiterung nicht verwenden, um zu überprüfen, ob sie alle vorhanden sind. Vielen Dank für die AppleScript-Hilfe. Ich wusste nicht über "enthält". Matthew Robertson vor 14 Jahren 0
@Matthew Robertson: Da sie `.r [0-9] +` enthalten, könnte dies möglich sein, da Applescript reguläre Ausdrücke mit dem Befehl `find` unterstützt. Dies ist jedoch etwas, das ich noch nie persönlich verwendet habe Probe. (noch?) Chealion vor 14 Jahren 0
Hmmm. Ich könnte aus den Dateinamen ein Array erstellen, den höchsten Namen (z. B. .r20) ermitteln und prüfen, ob sie auf r01 fallen. (Obwohl es ein Szenario gibt, bei dem r01 bis r20 heruntergeladen wurde und wir auf r21 warten.) Ich spiele damit. Prost. Matthew Robertson vor 14 Jahren 0