รับเส้นทางของโฟลเดอร์พาเรนต์ของตำแหน่งสคริปต์: Applescript


9

พื้นหลัง: ฉันพยายามเขียนแอพ appcript ง่ายๆที่จะเปิดใช้แอป tcl แต่ฉันติดอยู่ที่ส่วนแรกของสคริปต์

ฉันต้องการรับพาเรนต์โฟลเดอร์ของพา ธ ไปยัง applescript เมื่อฉันเรียกใช้รหัสนี้:

set LauncherPath to path to me
set ParentPath to container of LauncherPath

... ฉันได้รับข้อผิดพลาดนี้:

error "Can’t get container of alias \"Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:\"." number -1728 from container of alias "Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:"

หลังจากอ่านคำตอบนี้ฉันลองนี้:

set LauncherPath to path to me
set RealLauncherPath to first item of LauncherPath
set ParentPath to container of RealLauncherPath

... แต่ฉันได้รับข้อผิดพลาดนี้:

error "Can’t get item 1 of alias \"Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:\"." number -1728 from item 1 of alias "Macintosh HD:Users:simon:Downloads:folder with spaces:CrossFire-master:CrossFire Launcher for Mac.app:"

ความช่วยเหลือหรือความคิดใด ๆ ชื่นชมมาก ขอบคุณล่วงหน้า!

ป.ล. เมื่อฉันเข้าใจปัญหาข้างต้นสคริปต์ฉบับเต็มจะเป็นดังนี้:

set LauncherPath to path to me
set RealLauncherPath to first item of LauncherPath
set ParentPath to container of RealLauncherPath
set UnixPath to POSIX path of ParentPath
set launcherCrossFire to "/usr/local/bin/wish " & UnixPath & "/CrossFire.tcl > /dev/null &" -- creat command to launch CrossFire
do shell script launcherCrossFire

UPDATE: นี่คือสคริปต์การทำงานที่รวมคำตอบไว้ด้านล่าง:

set UnixPath to POSIX path of ((path to me as text) & "::") --get path to parent folder
set LaunchCrossFire to "/usr/local/bin/wish '" & UnixPath & "CrossFire.tcl' > /dev/null 2>&1 &" -- creat command to launch CrossFire
do shell script LaunchCrossFire -- run command

คำตอบ:


17

ลอง:

set UnixPath to POSIX path of ((path to me as text) & "::")

ขอบคุณ adayzdone! ฉันโพสต์รหัสสุดท้ายข้างต้นในคำถามเดิม ฉันมีอีกหนึ่งปัญหา แอปตัวเรียกใช้งานไม่ปิดหลังจากเรียกใช้งาน คุณมีความคิดเห็นเกี่ยวกับวิธีการแก้ปัญหานี้หรือไม่? ผมคิดว่าการส่งออกไปยัง dev / null จะหยุดที่เกิดขึ้น ...
ไซมอน

ไม่เป็นไรผมพบคำตอบที่นี่ ฉันเพิ่ม "/ dev / null 2> & 1 &" ที่ส่วนท้ายของคำสั่งแทนที่จะเป็นแค่ "/ dev / null &"
Simon

1

คุณควรเรียกใช้สคริปต์จากภายใน 'บล็อกที่ถูกบล็อก' เช่น:


tell application "Finder"
get path to me

set a to container of the result
return (a as alias)
-- Or just get the name of the Parent Container like;
set b to name of a
return b
end tell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.