2013-06-28 76 views
1

我想製作一個automator應用程序,它在當前目錄中創建一個空文件。 我做了一些谷歌搜索,發現:
http://hints.macworld.com/article.php?story=20050219134457298http://hints.macworld.com/article.php?story=20100509134904820OSX:如何使用applescript檢查當前目錄中是否存在文件?

然而,我想要做的更強大的東西。 如果指定的文件已經存在,我想顯示一個警告而不是覆蓋原始文件,這是上述鏈接之一。 (另一種創建使用文本編輯的文本文件。我不希望創建的文本文件。我要像什麼的Linux/Unix做一個空文件)

我已經想通了如何做大部分的一部分,但

  1. 如何使用applescript檢查文件是否存在於當前目錄?
  2. 如何連接兩個變量在applescript中?

回答

3

正在檢查文件是否存在(假設thefullpath已經設置在引用的問題):

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 
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中通過選擇「Get Info」來更改文件並更改「打開」屬性。您可以更改哪個應用程序使用該擴展名打開文件,或者您可以更改全部文件。例如,我所有的「.txt」文件都是用BBEdit.app打開的

你會投我的答案嗎?

0

不需要Finder或系統事件的另一種選擇是試圖強迫一個POSIX文件或文件對象的別名:

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

我一直在使用了大量的遲到這種就是命令/斌/測試 測試測試在這種情況下,存在一個文件

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如果文件存在,則爲true(不論類型)。

這是噸的其他測試選項顯示在/bin/test man page

相關問題