2015-07-05 49 views
0

我正在嘗試編寫一個簡單的applescript,用於組織任何選定文件夾中的文件。我想讓腳本以特定的時間間隔運行,並在出現問題時重新組織文件夾。爲此,我試圖將用戶選擇的文件夾的路徑保存到文件中。每次腳本運行時,它都會從該文件讀取文件夾路徑。AppleScript:使用路徑命令時寫入文件的垃圾值

這裏是從代碼片段:

set home_path to get path to home folder 

tell application "Finder" 
    set home_folder to folder (home_path as string) 
    if not (exists file "Clfd_config.cf1" in home_folder) then 
     set (folder_path) to choose folder with prompt "Choose the folder to organize" 
     set this_folder to folder (folder_path as string) 
     set path_file to open for access file (home_path & "Clfd_config.cf1" as text) with write permission 
     write folder_path to path_file 
     close access path_file 
    else 
     set path_file to open for access file (home_path & "Clfd_config.cf1" as string) 
     set folder_path to read path_file as string 
     set this_folder to folder (folder_path as string) 
     close access path_file 

    end if 
end tell 

然而,當我打開該文件,它已經亂碼信息,像這樣:

������Harshad��������������������œ‘xH+��� 7 Desktop����������������������������������������� ���������������� 7Éœ‘zç��������ˇˇˇˇ��I ���������� ������œ‘*∆������œ‘-5������D�e�s�k�t�o�p��� �H�a�r�s�h�a�d��Users/harshad/Desktop���/����ˇˇ������ 

當我嘗試讀取這個文件n個腳本,腳本顯然失敗。

我試過告訴腳本以文本的形式將文件寫入字符串,但是我一直收到folder_path變量不能轉換爲文本或字符串的錯誤。

我該怎麼做才能正確保存路徑,並且腳本可以從保存的文件中讀取它?

回答

0

主要問題是您正在向磁盤寫入別名文件說明符而不是字符串路徑。

我加了基本的錯誤處理,而寫入磁盤,並刪除了一些冗餘的代碼

property configFileName : "Clfd_config.cf1" 

tell application "Finder" 
    set configFile to (home as text) & configFileName 
    if not (exists file configFile) then 
     set folder_path to choose folder with prompt "Choose the folder to organize" 
     try 
      set fileReference to open for access file configFile with write permission 
      write (folder_path as text) to fileReference 
      close access fileReference 
     on error 
      try 
       close access file configFile 
      end try 
     end try 
    else 
     set folder_path to read file configFile 
     set this_folder to folder folder_path 
    end if 
end tell 
+0

感謝vadian,這工作得很好。但是,在嘗試閱讀文件時,我遇到了麻煩。編譯器提前觸發eof,而folder_path只能從文件中讀取最多10個字符。現在,我已經完成了「將folder_path設置爲在15之前讀取文件configFile」並且現在讀取了整個文件。 – uberjoker

0

看來你只是想保存的文件夾路徑的價值,並能夠在下一次運行時再次找到它。 如果僅這樣,爲什麼使用子例程將此路徑寫入特定位置的文本文件?是不是更容易使用「屬性」對象的特徵?

「屬性」變量可以改變,它會在腳本本身中保持新的值,直到下一次編譯。

試試這個劇本:第一次運行,它會問你的文件夾。選擇它。任何下一次運行,它只會顯示第一次運行時選擇的文件夾!

property My_Folder : "" 
if My_Folder is "" then -- first run, ask user to select folder 
    Set My_Folder to (choose folder with prompt "choose the folder to organise") as string 
end if 
display dialog "folder selected = " & My_Folder 

它做同樣的事情比讀取文本文件/寫...

+0

這隻有在腳本保存爲應用程序時纔可靠。目前正常的.scpt文件被重新編譯,該屬性被重置爲默認值。 – vadian