AppleScript mały problem

…a blokuje mnie i nie mogę dojść poprawnej składni!

Chodzi o to że w nazwie katalogu mam spacje np"/Dysk Data"
W terminalu wiem jak to wpisać “/Dysk\ Data” ale applescript nie chce mi tego zaakceptować i wywala błąd, reasumując w terminalu komenda bez problemu działa a w applescript wywala mi się na ścieżkach dostępu przez właśnie spacje,

do shell script “cd /Users/krzyhoo/Desktop/Dysk Data/”
do shell script “cd /Users/krzyhoo/Desktop/Dysk\ Data/”
do shell script “cd /Users/krzyhoo/Desktop/Dysk%20Data/”

żaden nie działa

Oczywiście zmiana nazwy katalogu nie wchodzi w grę, powyżej to tylko przykład na potrzebę wyłorzenia problemu

Z góry dziękuję

Ehh… Jak zwykle problem przy podwójnym parsowaniu backslash’a (nie Twój, tylko oprogramowania). :wink:

Wystarczy, że zrobisz tak:
do shell script “cd /Users/krzyhoo/Desktop/Dysk\ Data/”
…i powinno zadziałać. Pamiętaj jednak, że następne wywołanie do shell script ponownie odbywa się w katalogu głównym:

do shell script “cd /Users/krzyhoo/Desktop/Dysk\ Data/”
do shell script “pwd”

zwróci: “/”, natomiast:

do shell script “cd /Users/krzyhoo/Desktop/Dysk\ Data/; pwd”

zwróci dokładną ścieżkę: “/Users/krzyhoo/Desktop/Dysk Data”.

pomyłka

Wielkie dzięki, ale bug :slight_smile:

A co do cytatu to myślałem, że średnik jest jak “enter”,
pierwszy rozkaz, wykonaj
drugi rozkaz, wykonaj

Mógłbyś mi to pokrótce wyjaśnić? :wink:

Jeszcze raz Wielkie Dzięki

Ogólnie to nie jest bug, ponieważ AppleScript parsując używa blackslash’a jakos znaku specjalnego i zamienia odpowiednie kombinacje na odpowiednie znaki. Później to samo robi bash/sh, dlatego właśnie "\ ", czyli po pierwszym parsowaniu (przez AppleScript) pozostaje "\ ", a po drugim (bash lub inny shell) pozostaje " ".

Co do samego średnika, on po prostu oznacza koniec jednego polecenia i początek następnego, więc w jednej linijce możesz tak naprawdę zmieścić cały skrypt, który chcesz wykonać.
Być może jest jakiś sposób, żeby zachować stan środowiska między wywołaniami “do shell script”, ale póki co go nie znam. :wink:

Oczywiście działa, :laughing:

Jednak mam kolejne zagwozdki a skoro już znalazłem “mistrza”,
czy mógłbyś pomóć mi rozwiązać kolejny problem? :wink:

Wiem, że może to wyglądać laicko, źle skonstruowane, może są lepsze i szybsze metody itd. no ale uczę się i próbuję jak mogę, nie mam żadnych pomocy więc tym bardzieij mi trudno.
Podejrzałem, zmodyfikowałem i wyszło mi coś takiego co działa

tell application “iCal” to activate
delay 2
tell application “System Events”
tell menu item “Back up iCal…” of menu “File” of menu bar 1 of application process “iCal” to click
delay 2
keystroke “e” using command down
keystroke return
end tell

analogicznie zrobiłem drugi, który już nie działa a problem jak sądzę tkwi w dotarciu do submenu w menu “File”

tell application “Address Book” to activate
delay 2
tell application “System Events”
tell menu item “Address Book Archive” of menu item “Export” of menu “File” of menu bar 1 of application process “Address Book” to click
end tell

macie jakąś radę dla mnie uczniaka?
a może można to zrobić za pomocą komend z terminala? Nawet bym wolał bo działało by to znacznie lepiej, szybciej i stabilniej, zresztą chyba też bardziej profi, :slight_smile:

Z góry dzięki

Dziwny przypadek, najpierw dostawałem komunikat o błędzie dostępu do urządzeń wspomagających, co załatwiłem po prostu jedną opcją: Preferencje systemowe → Uniwersalny dostęp, zaznaczyć “Włącz dostęp do urządzeń wspomagających”, ale później zaczął się skarżyć brak menu “File” of menu bar 1 of application… itd.

Trochę to dla mnie niezrozumiałe. Użyłem nawet PreFab UI Browser, żeby uzyskać to menu, co zaowocowało takim kodem:

tell application "Address Book" to activate
delay 2
tell application "System Events"
	click menu item "Archiwum Książki adresowej…" of menu 1 of menu item "Eksportuj" of menu 1 of menu bar item "Plik" of menu bar 1 of process "Address Book"
end tell

Wygląda na to, że w niektórych miejscach są problemy z tłumaczeniami elementów, a jeżeli masz wszystko po angielski, to zastąp polskie nazwy ich angielskimi odpowiednikami i zobacz czy to zadziała. I zwróć uwagę na jedną rzecz: trzy kropki po nazwie… one są traktowane jak jeden znak (którego nie da się wprowadzić z klawiatury!!!), a nie jak 3 kropki… Coś w AppleScript albo OS X’ie jest mocno zwalone… :confused: