我正在编写一个程序,不断将桌面背景设置为在iTunes中播放的当前歌曲的专辑封面,为此,我将作品写入具有随机ID号的文件中。这意味着桌面每次都会更改为不同的文件。
当然,我希望能够在使用后删除所有这些文件,因此我尝试使用ID
删除包含图像的整个文件夹。
但是每次我运行脚本甚至在终端中输入完整目录时,都会收到错误:
“rm:~rf:没有这样的文件或目录 rm:Macintosh:没有这样的文件或目录 rm:HD:用户:BenClose:桌面:iTunesWallpaper:没有这样的文件或目录“
以下是我整个程序的代码,我不知道出了什么问题以及在哪里,所以任何帮助都会非常感激,因为我希望有人希望它能够使用这个程序。
do shell script "rm ~rf " & folderName
指的是正在更改的桌面。
screenNum
表示是否隐藏创建的文件。 hiddenFile
如果为true,"."
如果为false(添加到文件名开头的句点将使其隐藏)。
基本上,正在发生的事情是桌面背景被设置为专辑封面99次,之后我希望能够删除所有99个文件并让该过程重新开始。
错误发生在脚本的最末端,它尝试删除图像文件夹。
""
答案 0 :(得分:1)
问题是shell需要POSIX路径(斜杠分隔)
do shell script "rm -rf " & quoted form of POSIX path of folderName
使脚本更健壮的一些其他问题/注释:
path to
有一个参数as text
。使用它而不是强制
set folderName to (path to desktop as text) & hiddenFile & directoryName
在Finder中有一个属性desktop
,您应始终检查folder
或file
而非文字字符串
tell application "Finder"
if not (exists folder folderName) then
make new folder at desktop with properties {name:hiddenFile & directoryName}
end if
end tell
(由于桌面文件夹是Finder的 root 文件夹,您甚至可以省略at desktop
)。
randID
将是一个列表,因为screenNum
是一个整数但是您要添加字符串,因此强制randID
发送文字。
set randID to screenNum as text
不需要用于创建随机数的while表达式。 AppleScript可以重复特定次数。
set randID to screenNum
repeat 9 times
set randNum to (random number from 0 to 9) as text
set randID to randID & randNum
end repeat
fileName
也是一个无意的列表。删除花括号。
set fileName to (path to desktop as text) & hiddenFile & directoryName & ":" & randID & "." & fileExt
使用write
命令必须捕获潜在错误,否则可能会阻止文件被关闭。添加try - on error
块可确保可靠地关闭所有文件。
try
-- write to file
set outFile to open for access file fileName with write permission
-- truncate the file
set eof outFile to 0
-- write the image bytes to the file
write srcBytes to outFile
close access outFile
on error
try
close access file fileName
end try
end try
而不是询问System Events
进程是否正在运行,您可以询问应用程序本身。
if application "iTunes" is running then
最后但并非最不重要的是避免使用大型嵌套应用程序告诉块(如System Events
一个)。仅在应用程序告诉块中包含受影响的术语。
答案 1 :(得分:0)
尝试将rm命令中的“〜”更改为“ - ”,使其如下所示:
do shell script "rm -rf " & folderName
这将rf视为参数而不是文件目录。