AppleScript脚本应用异常:获取磁盘格式返回乱码求助
脚本应用(Script App)中获取磁盘格式返回乱码的解决方法
问题原因
Script Editor运行AppleScript时,会加载完整的AppleScript常量字符串映射,能将format属性返回的内部常量(如«constant ****dfh+»)正确转换为可读的磁盘格式名称;而打包成脚本应用(Script App)后,默认执行上下文可能未加载该映射表,导致常量无法解析为文本,直接显示原始乱码形式。
解决方案
方案1:使用diskutil命令获取格式(推荐)
通过Shell命令diskutil直接读取磁盘信息,输出为标准文本,避免AppleScript常量解析问题,跨执行环境表现一致:
set volumeList to paragraphs of (do shell script "ls /Volumes") set selectedVolume to choose from list volumeList with prompt "选择磁盘:" if selectedVolume is false then return -- 处理用户取消选择的情况 set volumeName to item 1 of selectedVolume -- 通过diskutil提取磁盘格式 set diskFormat to do shell script "diskutil info '/Volumes/" & volumeName & "' | grep 'File System Personality' | awk '{$1=$2=$3=\"\"; print $0}' | sed 's/^ *//;s/ *$//'" display dialog "磁盘格式:" & diskFormat
方案2:手动映射AppleScript常量
若坚持使用AppleScript应用对象(如Finder/System Events),需手动将内部常量映射为可读名称:
set volumeList to paragraphs of (do shell script "ls /Volumes") set selectedVolume to choose from list volumeList with prompt "选择磁盘:" if selectedVolume is false then return set volumeName to item 1 of selectedVolume tell application "System Events" set diskFormat to format of disk volumeName end tell -- 手动映射常见磁盘格式常量 set formatString to "" if diskFormat is «constant ****dfh+» then set formatString to "Mac OS Extended (Journaled)" else if diskFormat is «constant ****dfl+» then set formatString to "Mac OS Extended (Case-sensitive, Journaled)" else if diskFormat is «constant ****apfs» then set formatString to "APFS" else if diskFormat is «constant ****msdos» then set formatString to "MS-DOS (FAT)" else if diskFormat is «constant ****exfat» then set formatString to "ExFAT" else set formatString to "未知格式:" & (diskFormat as text) -- 兜底处理 end if display dialog "磁盘格式:" & formatString
排查思路
- 环境上下文差异:对比Script Editor与脚本App的执行环境,可在脚本中添加
do shell script "echo $PATH; id"查看环境变量、用户身份差异,确认是否因环境缺失导致常量解析失败。 - 权限检查:在「系统偏好设置-隐私与安全性-完全磁盘访问权限」中添加脚本App,确保其拥有足够的磁盘访问权限。
- AppleScript版本一致性:打开Script Editor偏好设置-通用,确认使用的AppleScript版本;脚本App默认使用系统当前版本,若存在版本差异可尝试升级或指定版本执行。
内容的提问来源于stack exchange,提问作者Free Wheeler
相关产品推荐
相关产品推荐

