OSX:如何使用applescript检查当前目录中是否存在文件?

时间:2013-06-28 23:08:42

标签: macos bash shell applescript automator

我想创建一个自动播放器应用程序,在当前目录中创建一个空文件。 我做了一些谷歌搜索,发现:
http://hints.macworld.com/article.php?story=20050219134457298http://hints.macworld.com/article.php?story=20100509134904820

但是,我想做一些更强大的事情。 如果指定的文件已经存在,我想显示一个警告,而不是覆盖原始文件,这就是上面的链接之一。 (另一个使用textEdit创建一个文本文件。我不想创建文本文件。我想要一个像linux / unix那样的空文件)

我已经想出如何完成大部分内容,但是

  1. 如何使用applescript ??
  2. 检查当前目录中是否存在文件
  3. 如何在applescript中连接两个变量?

4 个答案:

答案 0 :(得分:3)

检查文件是否存在(假设已在引用的问题中设置了完整路径):

tell application "Finder"
   if exists POSIX file thefullpath then
        --do something here like
        display alert "Warning: the file already exists"
   end if
end tell

不确定第二部分是什么意思,但是如果要连接存储在var1和var2中的字符串,你可以简单地执行

var1 & var2

答案 1 :(得分:1)

我在这类事情中使用了很多东西的是命令 / bin / test 在这种情况下存在测试文件的测试

    if (do shell script "/bin/test -e " & quoted form of  (POSIX path of theFile)  & " ; echo $?") is "1" then
-- 1 is false
--do something

end if

-e选项:

-e file如果文件存在,则为真(无论类型如何)。

/bin/test man page

中显示了大量其他测试选项

答案 2 :(得分:0)

以下代码改编自第二个链接,通常是正确的,但并不总是有效。当前目录最好指定为正在打开的文档的目录,这很可能来自Finder的前窗,但不一定。我喜欢编写无论如何都能工作的代码。

on run {input, parameters}
    tell application "Finder"
        set currentPath to insertion location as text
        set x to POSIX path of currentPath
        display dialog "currentPath: " & (x as text)
    end tell
    return x
end run

我编写了一个完整的“运行AppleScript”操作来将事情置于上下文中:

on run {input, parameters}

    # count the number of files
    set numFiles to 0
    repeat with f in input
        # warn the user that folders are not processed in this app
        tell application "Finder"
            if (kind of f is "Folder") then
                display dialog "The item: " & (f as text) & " is a folder.  Only files are allowed. Do you want to continue processing files or do you want to cancel?"
            else
                set numFiles to numFiles + 1
            end if
        end tell
    end repeat

    # require that at least one file is being opened
    if numFiles < 1 then
        display alert "Error: the application Test1.app cannot be run because it requires at least one file as input"
        error number -128
    end if

    # get the current directory from the first file
    set theFirstFile to (item 1 of input)
    tell application "System Events" to set theFolder to (container of theFirstFile)

    # ask the user for a file name
    set thefilename to text returned of (display dialog "Create file named:" default answer "filename")

    # create the file
    tell application "System Events" to set thefullpath to (POSIX path of theFolder) & "/" & thefilename
    set theCommand to "touch \"" & thefullpath & "\""
    do shell script theCommand

    # return the input as the output
    return input

end run

“触摸”命令没问题。如果该文件不存在,则创建该文件,如果该文件存在,则仅更改修改日期(这不是太糟糕),但不会覆盖该文件。如果您的文件被覆盖,则不是正在执行此操作的触摸命令。

我更改了默认文件名以删除扩展名“.txt”此扩展名可能默认由TextEdit.app打开,但您可以在Finder中为文件选择“获取信息”并更改“打开“财产。您可以更改哪个应用程序使用该扩展名打开文件,或者您可以更改它们。例如,我的所有“.txt”文件都是用BBEdit.app

打开的

你会投票给我答案吗?

答案 3 :(得分:0)

另一个不需要Finder或System Events的选项是尝试将POSIX文件或文件对象强制转换为别名:

try
    POSIX file "/tmp/test" as alias
    true
on error
    false
end try