我正在尝试编写一个将通过启动代理程序运行的AppleScript。脚本需要做的是编辑用户首选项plist文件,以便默认保存位置特定于该用户。我知道这可以通过将“〜/ documents”设置为模板plist中的位置来完成。但是Premier Pro还需要将暂存文件写入本地驱动器。为简单起见,我希望每个用户根据用户名将这些放入位置。只有在首次登录时才从模板创建本地配置文件时,才需要运行此脚本。
我已经开始使用本网站上的一些示例代码,并在下面进行简单的测试。此测试应编辑txt文件并将一个单词替换为另一个单词。此脚本目前无法使用。测试时,它会在TextEdit中打开test.txt,但不会执行任何操作。也没有显示错误。
提前谢谢
约翰。
replaceText("replace this", "replace with this", "/Volumes/USB_Drive/test.txt")
on replaceText(search_string, replacement_text, this_document)
tell application "TextEdit"
open this_document
set AppleScript's text item delimiters to the search_string
set this_text to the text of the front document as list
set AppleScript's text item delimiters to the replacement_text
set the text of the front document to (this_text as string)
close this_document saving yes
end tell
end replaceText
答案 0 :(得分:4)
这是一个不需要文本编辑的版本。它将以utf-8编码读取文件,更新其内容并将其作为utf-8编码文本存储回文件中。我在编写文件时使用try块的原因是,如果另一个应用程序同时打开了具有读取权限的文件,则会出现错误。如果您想要搜索并替换区分大小写,则可以将 set ti包含在内容的每个文本项周围。更换字符串时无需激活它,仅用于查找字符串。
set stringToFind to "replace that"
set stringToReplace to "with this"
set theFile to choose file
set theContent to read theFile as «class utf8»
set {oldTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, stringToFind}
set ti to every text item of theContent
set AppleScript's text item delimiters to stringToReplace
set newContent to ti as string
set AppleScript's text item delimiters to oldTID
try
set fd to open for access theFile with write permission
set eof of fd to 0
write newContent to fd as «class utf8»
close access fd
on error
close access theFile
end try
答案 1 :(得分:2)
嗯,是的,正如@dj_bazzie_wazzie指出的那样,你真的不需要文本编辑器,你可以使用终端并做类似的事情:
perl -pi -e 's/old text/new text/g' /path/to/theFile.plist
当然,您可以在AppleScript中使用强大的do shell script
命令:
do shell script "perl -pi -e 's/" & search_string & "/" & replacement_text & "/g' " & quoted form of (POSIX path of file_path)
- 假设file_path是一个带有Mac风格(冒号分隔)文件路径的变量。
答案 2 :(得分:0)
从http://discussions.apple.com/message/20542594#20542594修改,下面的处理程序可以执行您想要的操作。我做了一些更改并添加了变量。一些注意事项:(1)处理程序调用之前的'my'确保它被视为脚本的处理程序而不是TextEdit应该解释'内部'(因为它在tell块中); (2)'考虑案例'使得处理程序区分大小写,我认为你想要; (3)您可能会考虑类似TextWrangler,它具有强大且功能丰富的AppleScript支持,并在其AS字典中包含文本替换,Smile也是一个非常棒的脚本编辑器(可以处理文本,并且可以很好地格式化plist文件)
tell application "TextEdit"
set workingWin to open this_document
set this_text to the text of the workingWin
set the text of the workingWin to (my replaceText(this_text, search_string, replacement_text))
close workingWin saving yes
end tell
to replaceText(someText, oldItem, newItem)
(*
replace all occurances of oldItem with newItem
parameters - someText [text]: the text containing the item(s) to change
oldItem [text, list of text]: the item to be replaced
newItem [text]: the item to replace with
returns [text]: the text with the item(s) replaced
*)
considering case
set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, oldItem}
try
set {itemList, AppleScript's text item delimiters} to {text items of someText, newItem}
set {someText, AppleScript's text item delimiters} to {itemList as text, tempTID}
on error errorMessage number errorNumber -- oops
set AppleScript's text item delimiters to tempTID
error errorMessage number errorNumber -- pass it on
end try
end considering
return someText
end replaceText