2013-04-01 26 views
1

對不起,我甚至沒有粘貼我的編碼嘗試,但我從未使用過AppleScript,我不知道我會如何做到這一點。我已經在網上找到了一小部分代碼,它們完成了每一步的一小部分,但是我找不到如何去做的一些關鍵部分。如果我能弄清楚這將節省很多時間。基本上我的問題是,一個客戶端發送了數千張照片,所有這些照片都在多個級別的子文件夾中,還有一個包含大約300個文件名的Excel文檔,我需要將其拉出並使用。我可以將Excel文檔中的文件名複製到純文本文件中,多行或逗號分隔。AppleScript讀取包含文件名的文本文件,搜索每個文件名,並且如果找到文件將其複製到文件夾中

原來這就是我需要做的:

  • 打開文件夾選擇對話框中,選擇目標文件夾
  • 打開文件選擇對話框,通過每一行選擇文本文件
  • 環路(或逗號文本文件
  • 取該字符串並搜索包含該字符串的文件名
  • 將第一個結果複製到文件夾中(比方說桌面:找到的照片)
  • 如果找不到文件相匹配的字符串,然後添加搜索串轉換爲文本文件(這樣我就可以通過電子郵件發送給客戶端,並要求他們發給我)

如果你可以」 t編碼整個過程,如果你可以幫我循環瀏覽文本文件,搜索文件名並將第一個結果複製到另一個文件夾,並且在文件未找到的情況下將文件名添加到文本文件中,那麼我可以將它拼湊在一起。謝謝你的幫助。

+0

感謝我的固定格式aleroot :) – Gavin

回答

2

你可以嘗試沿着線的東西:

set newFolder to POSIX path of (path to desktop as text) & "Found Photos" 
do shell script "mkdir -p " & quoted form of newFolder 
set filePaths to paragraphs of (read (choose file with prompt "Select file list") as «class utf8») 
set fileFolder to POSIX path of (choose folder with prompt "Select folder containing files") 

set foundFiles to {} 
repeat with fileName in filePaths 
    set fileName to (contents of fileName) 
    set xxx to do shell script "find " & quoted form of fileFolder & " -name " & quoted form of fileName 
    if xxx ≠ "" then 
     tell application "System Events" to move file xxx to newFolder 
     set end of foundFiles to fileName & return 
    end if 
end repeat 

set foundFiles to (foundFiles as text) 
do shell script "echo " & quoted form of foundFiles & " > " & quoted form of POSIX path of ((path to desktop as text) & "FoundFiles.txt") 
+1

完美的作品!謝謝。這將爲我節省很多時間! – Gavin

+0

我試圖編輯它,以便它複製文件而不是移動它,而且我沒有太多的運氣。首先,我嘗試將「移動」更改爲「重複」,但出現錯誤「系統事件發生錯誤:無法將/ Users/Gavin/Desktop/Found Photos」改爲類型位置參考。「接下來,我嘗試將整行改爲「告訴應用程序」Finder「將文件xxx複製到文件夾newFolder」。這給了我錯誤「Finder有錯誤:無法設置文件夾」/用戶/加文/桌面/找到照片「文件」/用戶/加文/桌面/ AppleScript測試//照片2.JPG「。」你知道什麼是錯的嗎? – Gavin

+1

告訴應用程序「Finder」複製(POSIX文件xxx)作爲別名(POSIX文件newFolder)作爲別名 – adayzdone

2

它可能是更容易使用shell腳本:

IFS=$'\n' 
mkdir -p ~/Desktop/target/ 
for l in $(cat ~/Desktop/files.txt); do 
    found=$(find ~/Documents/source -type f -name "*$l*") 
    [[ -n $found ]] && cp $found ~/Desktop/target/ || echo "$l" 
done 
+0

好的。這很好用... – Gavin

相關問題